我使用登錄功能在我的網站與會話。 無論用戶是否註銷,此會話都會在幾分鐘後過期。 現在我想要的是會話應該只會在用戶註銷時過期。如果用戶不註銷他的帳戶,然後2-3天后回來,甚至他應該出現登錄。會話本身永遠不會過期
我有發現了一些例子,他們增加了會話到期的時間,但我希望它只應該在用戶註銷事件時到期,而不管他花費多少時間註銷。
我該怎麼做?
編輯:
session_cache_expire(0);
session_start();
這是寫的方式這樣做呢?
我使用登錄功能在我的網站與會話。 無論用戶是否註銷,此會話都會在幾分鐘後過期。 現在我想要的是會話應該只會在用戶註銷時過期。如果用戶不註銷他的帳戶,然後2-3天后回來,甚至他應該出現登錄。會話本身永遠不會過期
我有發現了一些例子,他們增加了會話到期的時間,但我希望它只應該在用戶註銷事件時到期,而不管他花費多少時間註銷。
我該怎麼做?
編輯:
session_cache_expire(0);
session_start();
這是寫的方式這樣做呢?
經常使用,這種情況下的解決方案是:
這樣:
你有至少從用戶的角度來看,「永遠不會被堵住」的優勢。
另請注意,對於「正常」會話,當用戶關閉瀏覽器時,包含會話ID的cookie將被刪除 - 因此,無論會話的生命期是多長,他都將被斷開連接。
隨着我提出的解決方案,你是一個誰設置cookie的應該多長時間留在用戶的計算機;-)
這意味着,雖然,當用戶手動註銷手續,你有當然刪除他的會話和cookie,所以他不是立即重新自動登錄。
當然,你必須要小心你在cookie中設置:Cookie是不太安全的,所以不要在它存儲的密碼,例如;-)
事實上,這種做事方式是「記住我」功能經常起作用的方式;除非,在這裏,你的用戶就不必檢查複選框,激活「記住我」 ;-)
如果您還沒有開發這種東西的時候,一個非常快速和骯髒的方法是在所有頁面上使用一些Ajax請求,這隻會在服務器上「ping」一個PHP頁面 - 這會使會話保持活動狀態(但這不是一個很好的做事方式:你仍然有很多會話在服務器上,你會有很多無用的請求......並且只有當用戶沒有關閉他的瀏覽器時它纔會起作用)。
您在測試時刪除了Cookie嗎?啓用了cookies嗎?你的代碼在某個地方破壞會話嗎?
此外,請參閱我對另一篇文章的回答:Quick question about sessions in PHP,它解釋瞭如何保持登錄狀態。如果您希望用戶永遠保持登錄狀態,請不要執行cronjob/sheduled任務。
你無法單獨使用PHP內部會話處理。 PHP將始終在session-cookie中發送會話標識,該標識在用戶關閉瀏覽器時會過期。要實現某種自動登錄,您需要一些附加代碼,在用戶的瀏覽器上設置持久性Cookie,並處理這些Cookie的識別以及Cookie值與相應用戶帳戶之間的映射。
請注意,這會嚴重影響安全問題,因此您必須處理很多事情。請下面就看怎麼可能自動登錄功能,可以工作:
我已經設定的用戶名和一個隨機數,一個cookie串接到它,然後我已經將它存儲到數據庫中了。當一個頁面被調用,然後我檢查系統cookie,並將其與數據庫中的一個匹配,如果兩者匹配,那麼我顯示該人登錄,否則不會。並且當一個人註銷時,我將該cookie設置爲空。 這是正確的方式嗎?這是安全的嗎? – developer 2009-08-26 08:27:09
至少對我來說似乎不錯 - 它永遠不會是「完美的安全性」,因爲任何使用該傢伙的電腦的人都會自動登錄,但這應該足夠了,我想:-) – 2009-08-26 10:38:27
遐我瞭解安全問題。非常感謝馬丁:-) – developer 2009-08-26 12:06:19