簡體   English   中英

Session_set_save_handler close / gc

[英]Session_set_save_handler close/gc

會話超時后,我需要執行一個操作。 但是我不知道如何在沒有傳入請求的情況下觸發該動作。 一個事件處理程序/一個偵聽器/一個計時器很合適,但是由於PHP不支持這樣的事情,所以很難完成我想要的事情。

經過大量搜索之后,我遇到了session_set_save_handler,但是我仍然無法完全理解該方法的工作原理。 如果我編寫的代碼會在何時執行close方法中觸發該動作?

我還需要保持當前的會話解決方案不變,並且我想知道將session_set_save_handler與之結合使用會產生什么影響? (我當前的解決方案設置會話cookie,為會話分配名稱並啟動會話,當用戶注銷或會話超時(該值在配置文件中設置)后完成請求或會話時,該會話被完全銷毀)

問候!

PHP需要以某種方式運行才能執行PHP代碼。 通過用戶請求或cronjob。

當PHP請求完成執行或調用session_write_close()時,會話將保存到語言環境存儲中

這個session_set_save_handler()允許您編寫自己的保存處理程序。

這在php,AFAIK中很難做到。

但是您可以嘗試制作一個被動會話處理程序:

  • 存儲與時間戳關聯的會話ID。
  • 每次與特定ID相關聯的用戶發出請求時,都要刷新其時間戳。

您可以通過比較系統的當前時間和每個會話ID的時間戳來檢測已失效的會話。 超過給定閾值(例如30分鍾)的那些被認為已過世。 然后,您可以為這些會話ID執行自己的保存處理程序。

如果需要立即執行會話結束處理程序,則此方法將不起作用,因為每次(來自任何用戶)請求到達時都會執行此過程,因此它將直接取決於網站的流量。

但是您也可以通過每15分鍾左右設置cron作業來解決此問題。 根據您的保存處理程序的昂貴程度,似乎可以接受周期性。

暫無
暫無

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

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