2011-10-20 57 views
2

更新,24OCT2011:我把它移到了ServerFault中,這可能是更合適的,而這正是我要發佈這個的地方。但是,我真的找不到「轉移到SF」選項,我只是在那裏複製它。任何人都可以幫助實際移動它?Memcache + PHP會話調優:memcache如何過期密鑰?

我已經做了一些研究,並沒有找到明確的答案。

我們有一個使用PHP + Memcache會話處理程序的網絡應用程序。

我有幾個問題,都是相互關聯的,但最終我的問題是,「爲什麼PHP會話顯然沒有過期,當我們認爲他們應該是?即最終用戶應該在設定時間之後退出應用程序,但不是。

這裏是點,請幫我接他們,並告訴我在哪裏,我錯了:

  • 我的理解是,內存緩存到期根據設定的時間(按鍵,以秒或Unix時間戳較大值)。
  • 到期是懶惰 - 即沒有事先
  • 刪除的PHP memecache會話處理程序使用sessions.gc_max_lifetime設置內存緩存密鑰過期。 idk,也許它不?
  • Memcache應該在提供請求的密鑰並且已經過期時不提供服務(然後也可以刪除它?)。但至少不會爲它服務。
  • 這種不服務的行爲應該對PHP等同於刪除的會話並且用戶被註銷。

用戶沒有被註銷。

我怎樣才能調試呢? Memcache並不完全透明。

更新 我應該指定未運行的示例大小寫是會話超時設置爲兩小時的站點。一個示例用戶會在晚上繼續使用該站點,然後在8-10小時後回到站點並仍然登錄。

+0

您知道您不必等待memcache密鑰過期,您可以在任何時候將其刪除嗎? – fire

+0

你可以直接與Memcache溝通......在Telnet你有多好? –

+0

我使用了telnet界面。問題在於找到我想要的萬匙鑰匙中的鑰匙。 – JDS

回答

0

最終用戶在上次向服務器發送請求後,應該在設定時間之外退出應用程序。客戶每次提出請求時,都會重置其到期日。如果到期時間爲3分鐘,並且您每2分鐘發出一次請求,則您的會話永遠不會過期。

+0

對,我應該說明。我會更新帖子。 – JDS

+0

您可以檢查內存緩存條目以查看是否將到期時間設置爲您所期望的。 [This](http://php.net/manual/en/memcached.sessions.php)描述了memcache存儲其會話密鑰的位置。我不知道你的應用程序是如何構建的,但是一些框架會設置輔助cookie,在會話過期後自動登錄用戶(「記住我」設置)。 –