2012-05-20 117 views
5

我使用Zend將會話過期設置爲1,800秒。我想知道,如果每次我代表用戶向瀏覽器發送服務器請求時以及用戶加載新頁面時,會話過期時間是否會刷新爲1800秒,或者當用戶加載新一頁?PHP會話到期 - 它什麼時候刷新?

+2

您可以將其設置爲5秒並對其進行測試。 – goat

+0

這可能取決於您使用會話的方式以及您正在使用的選項和配置。 – RockyFord

回答

2

當用戶加載新頁面時,即瀏覽器代表用戶向服務器發出請求。所以你在上面畫的兩個場景是一樣的。

會話啓動時,會話ID被髮送到瀏覽器,該瀏覽器通常將其存儲在cookie中。瀏覽器然後使用該cookie將會話ID傳遞給服務器,每個請求都標識該用戶。服務器會跟蹤會話何時到期,並且該區域可能會有點棘手(請參閱How do I expire a PHP session after 30 minutes?

但是,只要您使用相同的瀏覽器發出請求,那麼會話過期將在兩種情況下刷新你已經給了。

0

保存會話標識(以及源自目標服務器的所有其他Cookie)的cookie會與您對服務器發出的每個請求(無論是頁面刷新還是ajax調用)一起傳播。

所以是的,會話刷新與服務器的任何交互。

0

當你做session_start()如果是第一次調用,服務器將會話信息保存在/ tmp文件夾中的一個文件中,併發送給你的瀏覽器一個帶有這個文件標識符的cookie,否則服務器獲取cookie標識符並加載文件信息。默認情況下,這個cookie的持續時間是30分鐘。

您可以在php.ini中增加此cookie的時間或手動設置ini_set函數或.htacces文件中的指令。您只需設置指令session.cookie_lifetime。這些值是秒數,或者如果設置爲cookie,則直到您關閉瀏覽器纔有效

另一個可行的解決方案是爲用戶創建令牌系統,例如,手動向瀏覽器發送cookie,該cookie在2個月後過期標記寬度(大的隨機密鑰,保存在帶有用戶標識字段的數據庫表中)。當會話不可用時,您檢查cookie是否存在,您可以使用cookie令牌手動重新創建會話登錄以查找用戶。