Session 的設定與 Cookie 不同,必須先行啟動,在PHP中必須調用 session_start()函數,以便讓 PHP 核心程式將和 Session相關的內建環境 變數預先載入到記憶體中。
使用 session_start()函數啟動會話,文法格式如下的形式:
session_start(void); // 建立 Session,開始一個會話,進行 Session 初始化
session_start()這個函數沒有參數,且傳回值均為 TURE。該函數有兩個主要的作用,儀式開始一個會話,而是返回已經存在的會話。
當第一次訪問網站時,session_start()函數就會建立一個唯一的 Session ID ,並自動通過 HTTP 的回應標頭將這個 Session ID 儲存到用戶端 Cookie 中。同時,頁在伺服器端建立一個以這個 Session ID 命名的檔案,用於儲存這個使用者的會話資訊。當同一個使用者再次訪問這個網站時,也會自動通過 HTTP 的要求標頭將用戶端 Cookie 中儲存的 Session ID給帶過來,這時 session_start()函數就不會再去分配一個新的 Session ID,而是在伺服器的硬碟中去尋找和這個 Session ID 同名的Session檔案,將之前為這個使用者儲存的會話資訊讀出,在當前指令碼中應用,達到跟蹤這個使用者的目的。所以在會話期間,同一個使用者在訪問伺服器上任何一個頁面時,都是使用同一個 Session ID。
注意: 通常,session_start()函數在頁面開始位置調用,然後會話變數被登入到資料 $_SESSION。
說明:如果使用基於 Cookie 的 Session,在使用該函數開啟 Session之前,不能有任何輸出的內容。因為基於 Cookie 的 Session 實在開啟的時候,調用 session_start()函數產生唯一的一個 Session ID,需要儲存在用戶端電腦的 Cookie 中,所以使用 session_start()函數之前瀏覽器不能有任何輸出,即使是空格和空行也不行,否則會產生輸出字串產生的錯誤。
如果不想在每個指令碼中都使用 session_start()函數 來開啟 Session,可以再 php.ini 裡面設定 session.auto_start = 1,就不需要每次使用 Session 之前都要調用 session_start()函數。但啟用這個選項也餓石油一些限制的,就是不能將對象放入 Session 中,因為類定義必須在啟動 Session 之前載入。 所以一般不建議使用session.auto_start來開啟 Session。