2010-11-04 70 views
1

我正在使用的PHP網站上的登錄由會話cookie進行管理,會話中存儲用戶標識。這工作正常,直到瀏覽器關閉,此時用戶信息似乎正在丟失。即使Cookie和PHPSESSID持續存在,爲什麼PHP會話信息不能通過瀏覽器重新啓動持續?

我已經設置了GC和cookie的存活時間每七天,和PHP會話設置如下(通過設置的.htaccess):

session.use_cookies On On 
session.cookie_lifetime 604800 0 
session.gc_divisor 1000 1000 
session.gc_maxlifetime 604800 1440 
session.gc_probability 0 0 

我可以用Chrome和Firebug的驗證PHPSESSID的有效期爲七天,並且在瀏覽器重新啓動之間持續存在。但是,會話變量(如userid)肯定不會被保留(我可以在單獨的頁面上使用var_dump來驗證這一點)。如果正確設置了gc和cookie的生命週期,會在瀏覽器重新啓動之間刪除會話變量。

回答

2

的問題結束了託管服務提供商,Rackspace的雲之中。 Rackspace Cloud Sites默認保存每個服務器的$ _SESSION信息,但不會嘗試在瀏覽器重新啓動之間將同一用戶引導至同一服務器。我將不得不建立一個基於數據庫的會話系統或將會話文件存儲在別的地方。

我的問題可能不清楚,因爲「會話cookie」(一種只持續到瀏覽器重新啓動的cookie)和$ _SESSION信息之間存在衝突,應該持續到垃圾收集。

0

默認情況下會話cookie在瀏覽器關閉時被刪除。你必須採取其他措施堅持 - 這就是爲什麼你看到「記住我」作爲選擇,因爲它不是預期的行爲。

1

確保您沒有將「會話」和「cookies」混淆。會話只會在瀏覽器保持打開狀態時持續。無論瀏覽器是否關閉,Cookie都會保留到它們過期。

查看此頁面以獲得一些指導:http://www.w3schools.com/php/php_cookies.asp或在官方文檔:http://www.php.net/manual/en/function.setcookie.php

+0

我的理解是,只要PHPSESSID保持不變並且每次從瀏覽器發送到服務器,$ _SESSION信息都應該在瀏覽器重新啓動之間持續存在? – 2010-11-04 19:20:20

+0

瀏覽器不會自動發送PHPSESSID,因爲它在關機時會鬆動。試試$ _COOKIES。 – drew 2010-11-04 19:25:19

相關問題