站內搜尋

Wednesday, December 29, 2010

[PHP] 淺談使用SESSION功能時,自動產生的SESSION ID...

在使用 SESSION 時,Web Server 會自動產生一個檔案放在我們指定的資料夾(php.ini 中的 session.save_path),這個檔案的檔名通常會是 sess_68b4d290db0293774a3a295fb273d0a1 (舉例),sess_後面接的字串就是所謂的 SESSION ID。
SESSION ID 的字串,會以 COOKIE 的型態存放在使用者電腦裡,所以當使用者連到網站時,會依照 COOKIE  的 SESSION ID 去跟 Web Server 的 session檔名 比對,藉以找到屬於該使用者專屬的 session檔案,相關函式如下...

查看 SESSION ID 值
echo session_id();  //68b4d290db0293774a3a295fb273d0a1

查看 COOKIE 的名稱
echo session_name();  //顯示範例:PHPSESSID

查看存在 COOKIE 的 SESSION ID 值
echo $_COOLIE['PHPSESSID'];  //68b4d290db0293774a3a295fb273d0a1

備註:
利用 URL 的參數手動傳遞 SESSION ID的作法
<a href="login.php?<?=session_name();?>=<?=session_id();?>">Login</a>

特別說明:
觀察到一個現象,因為 PHP 在使用者第一次讀網頁時,無法判斷使用者的瀏覽器是否開啟 COOKIE 功能,就算瀏覽器有開啟 COOKIE 功能,PHP 也會先以 URL 模式去傳遞SESSION ID ,因此,此時超全域變數【 SID 】會有值,例如:
echo SID;  //PHPSESSID=68b4d290db0293774a3a295fb273d0a1
而 $_COOKIE['session_name'] 會是空值,但如果按重新整理的話, PHP 會採用 COOKIE 模式, SID 就會變成空值,而 $_COOKIE['session_name'] 則會有值,例如:
echo $_COOKIE['session_name'];  //68b4d290db0293774a3a295fb273d0a1

No comments:

Post a Comment