2011-10-20 56 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,在会话过期后自动登录用户(“记住我”设置)。 –