簡體   English   中英

PHP會話超時回調?

[英]PHP session timeout callback?

我正在運行PHP + APACHE + CENTOS Linux組合。

我已經在網站上實現了登錄和注銷。

我的問題是,我怎么知道php會話何時超時(用戶關閉了他的瀏覽器而沒有注銷)?

原因是,當用戶執行以下任何操作時,我想執行一些清理和/或數據庫更新(調用另一個PHP):(1)LOGGED-OUT或(2)TIMED-OUT

我的猜測是我必須使用Apache / Linux,對吧?

不是檢測php會話何時超時,你可以創建一個腳本,該腳本將以某個半定期間隔運行(每5分鍾就會說,最有可能使用crontab作業),這將記錄/執行清理任何人在最后一小時(或任何超時值)自動激活。 只需在用戶表中添加“lastseen”即可。

跟蹤數據庫中的會話

如果您將會話的詳細信息保存在數據庫表中並記錄任何活動,則可以輕松檢查哪些會話在特定時間段內處於非活動狀態。

進程隊列

為用戶操作添加清理功能會不必要地減慢您的網站速度。 在從服務器獲得響應之前,用戶不必等待此類操作發生。

科雷

相反,您可以將要執行的操作添加到隊列表,然后使用CRON作業定期檢查隊列表以查看需要執行的操作。 此處列出 CRON語法。

您可以將會話ID存儲在帶有時間戳的數據庫中,並在每次用戶請求網頁時更新時間戳。

然后設置一個查看每個“活動”會話的cron,計算不活動時間並將會話更新為“死”(可以使用定期運行的單個SQL語句完成)。

此外,修改您的注銷以更新會話表並將會話設置為“死”。

無論如何,我認為沒有其他方法可以做到這一點(使用“標准”PHP函數),但讓我們看看其他人說的話。

我有同樣的問題,但使用Lighty + PHP + Ubuntu。 我認為問題是,php只對頁面請求作出反應,因此沒有機會讓PHP在超時時引發事件。

您可以在PHP中覆蓋會話存儲功能 ,但這對您也沒有幫助。

您可以將最后一個事件的時間存儲在會話中,並且在每個會話開始時清理已經遇到超時的舊會話。 不是一個非常干凈的方式,但我找到的唯一工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM