一般透過在各個頁面之間傳遞的唯一的Session ID,並透過Session ID 提取這個使用者在伺服器中保存的Session 變數,來追蹤一個使用者。常見的 Session ID 傳送方法主要有兩種。
第一種方法是基於Cookie 的方式傳遞Session ID,此方法比較最佳化,但無法經常使用,因為使用者可以在客戶端封鎖Cookie
#第二種方法則是透過URL 參數傳遞,直接將會話ID 嵌入到URL 中去。
相關專題推薦:php session (包含圖文、影片、案例)
在 Session 的實作中通常都是採用基於Cookie的方式,客戶端保存的Session ID 就是一個Cookie 。當客戶端停用 Cookie時,Session ID就無法再 Cookie 中儲存,也就無法再頁面之間傳遞,此時 Session失效。不過在 Linux 平台上可以自動檢查 Cookie 狀態,如果用戶端停用它,則系統會自動把 Session ID 附加到 URL 上傳送。而使用 Windows 系統則沒有此功能。
1.透過Cookie 來傳遞Session ID
如果客戶端沒有禁止Cookie,則在PHP腳本中透過session_start()函數進行初始化後,伺服器會自動傳送HTTP 標頭將Session ID 儲存到客戶端電腦的Cookie 中。類似如下的設定方式:
虛擬向 cookie 中設定 Session ID 的程序
setcookie(session_name(), session_id(), 0, '/')
第一個參數呼叫 session_name()函數,傳回目前 Session 的名稱作為 Cookie的識別名稱。可以再呼叫 session_name()函數時提供參數改變目前 Session 的名稱。
第二個參數呼叫 session_id()函數,傳回目前 Session ID 作為 Cookie 的值。也可以透過呼叫 session_id()
函數時提供參數設定目前的Session ID。
第三個參數值為 0,透過在php.ini檔案中由 session.cookie_lifetime
選項設定的值。預設為0,表示 Session ID 將在客戶端的 Cookie 中延續到瀏覽器關閉。
第四個參數 “ / ”,也是透過PHP設定檔指定的值,在 php.ini 中由 session.cookie_path
選項設定的值。預設為 “ / ”,表示在cookie 中要設定的路徑在整個域內都有效。
2. 透過 URL 來傳遞 Session ID
如果客戶端瀏覽器支援 Cookie,就把 Session ID 作為 Cookie 儲存在瀏覽器中。但如果使用者禁止 Cookie 的使用,則瀏覽器中就不存在作為 Cookie 的 Session ID,因此在客戶端請求中不包含 Cookie 資訊。如果當呼叫 session_start()函數時,無法從客戶端瀏覽器取得作為 Cookie 的 Session ID,則又建立了一個新的 Session ID,也無法追蹤使用者狀態。 因此,每次使用者要求支援 Session 的 PHP腳本,session_start()函數在開啟 Session 時都會建立一個新的 Session,這樣就失去了追蹤使用者狀態的功能。
在PHP 中提供了追蹤Session 的另一種機制,如果客戶端瀏覽器不支援Cookie,則PHP 可以重寫客戶端請求URL,把
Session ID 加入到URL中。可以手動在每個超連結的 URL 中都新增一個 Session ID,這種方法工作量比較大,一般不建議使用這種方式。其範例的程式碼如下所示:
<?php //开启 session session_start(); // 在 URL 后面附加参数,变量名为session_name()获取的名称,值为session_id()获取 echo '<a href="test.php?'.session_name().'='.session_id().'">演示</a>'; ?>
相關學習推薦:PHP程式設計從入門到精通
以上是php中如何傳遞Session ID的詳細內容。更多資訊請關注PHP中文網其他相關文章!