php中如何傳遞Session ID
一般通過在各個頁面之間傳遞的唯一的 Session ID,並通過 Session ID 提取這個用戶在服務器中保存的 Session 變量,來跟蹤一個用戶。常見的 Session ID 傳送方法主要有兩種。
第一種方法是基於 Cookie 的方式傳遞 Session ID,這種方法比較優化,但是不能經常使用,因為用戶在客戶端可以屏蔽Cookie 。
第二種方法則是通過 URL 參數進行傳遞,直接將會話 ID 嵌入到 URL 中去。
在 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 的過程
1 |
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,這種方法工作量比較大,一般不建議使用這種方式。其示例的代碼如下所示:
1 2 3 4 5 6 |
<?php
//開啟 session
session_start();
// 在 URL 後面附加參數,變量名為session_name()獲取的名稱,值為session_id()獲取
echo ‘<a href="test.php?‘ .session_name(). ‘=‘ .session_id(). ‘">演示</a>‘ ;
?>
|
php中如何傳遞Session ID