簡體   English   中英

我如何知道 session 是否仍處於活動狀態?

[英]How can i know if a session is still active or not?

我將會話 ID 存儲在數據庫表中。 我想運行一個腳本,從表中讀取每個 session id 並檢查此 session 是否處於活動狀態。

我知道 session 信息存儲在一個目錄中(默認為/tmp )並在 session 關閉時從那里刪除。 但是,如果用戶在未斷開與 session 的連接的情況下關閉瀏覽器,則 session 文件仍位於/tmp目錄中。

我如何知道 session 是否仍處於活動狀態?

我已經搜索了 session 函數,但沒有找到任何可以幫助的東西。

一般來說,唯一的方法是每次引用 session 時更新“上次使用”日期時間/時間戳,並在會話未使用一段時間后丟棄/停用會話。

無法判斷 session 是否會被進一步引用,因為它們不會在請求之間保持打開狀態,只是在需要時引用......並且需求由變化無常的客戶決定。

如果您的會話是基於文件的,聽起來,您可以使用單個文件的最后訪問日期,可能會為自己省點麻煩。

如果您在數據庫中保留會話。 將上次訪問或修改的時間戳添加到數據庫表。 我已將代碼放入我的程序中,以檢索或存儲 session 信息,這些信息在一個多小時前從修改的會話中刪除。 無論您希望 session 有多長。 在每次通話時,您都可以更新該時間戳。 似乎這會導致性能下降,但我已經使用了相當多的模式/過程。 我幾乎總是使用數據庫來存儲 session 信息。 您應該研究session_set_save_handler() 我可以嘗試從我以前使用它的項目中收集一些我自己的代碼,但我相信閱讀這方面的手冊和谷歌搜索實現會對你有很大幫助。

你為什么要關心這個已經過時的會話? 無論如何,它們將在某個隨機時間從臨時文件夾中清除。

您應該檢查數據庫中的上次訪問時間,如果它超過一些預定義的超時 - 將其標記為已死。

但也要考慮你的表現。 這是將 session 數據存儲在memcache或類似的東西中的更好方法 - 只需將其存儲在 memory 中,而不是存儲在 DB 中。 在此處閱讀更多信息: http://memcached.org/

將 session 數據存儲在 memcached 中真的很容易: http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/

沒有這樣的 function。 PHP 本身使用某種技巧來確定 session 何時過期,php.ini 配置文件中有幾個選項。

簡而言之,每次 session 啟動時,都會有一個gc_probability / gc_divisor chanche php 將啟動待處理數據的垃圾收集。 gc_maxlifetime秒之前訪問的 session 被認為已過期,PHP 將其刪除。

您可以在此行為上進行中繼,調整所涉及的選項或使用類似方法模仿此行為。

以供參考:

暫無
暫無

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

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