【问题标题】:Memcache+PHP session tuning: How does memcache expire keys?Memcache+PHP 会话调优:memcache 如何过期键?
【发布时间】:2011-10-20 22:22:02
【问题描述】:

2011 年 10 月 24 日更新:我将其移至 ServerFault,这可能更合适,也是我最初打算发布此内容的地方。但是,我真的找不到“移至 SF”选项,我只是将它复制到那里。任何人都可以帮助实际移动它吗?

我对此进行了一些研究,但没有找到明确的答案。

我们有一个使用 PHP+Memcache 会话处理程序的 Web 应用程序。

我有几个相互关联的问题,但最终我的问题是,“为什么 PHP 会话在我们认为应该过期的时候却没有过期?”即最终用户应该在设定的时间后退出应用程序,但不是。

这里是点,请帮我把它们连接起来,并告诉我我哪里弄错了:

  • 我的理解是,Memcache 会根据设置的时间(以秒为单位)使键过期(或较大值的 unix 时间戳)。
  • 过期是惰性的 - 即没有提前删除任何内容
  • PHP memecache 会话处理程序使用 sessions.gc_max_lifetime 设置 memcache 密钥到期时间。 idk,也许不是?
  • Memcache 应该在提供请求的密钥并看到它已过期时,不提供它(然后也可能删除它?)。但至少不要上桌。
  • 对于 PHP,这种不提供服务的行为应该等同于删除会话和注销用户。

用户没有被注销。

我该如何调试呢? Memcache 并不完全透明。

更新 我应该指定没有工作的示例案例是一个会话超时设置为两个小时的站点。示例用户会在晚上最后一次使用该网站,然后在 8 到 10 小时后返回该网站并仍然登录。

【问题讨论】:

  • 您知道您不必等待 memcache 密钥过期,您可以随时将其删除,对吧?
  • 您可以直接与 Memcache 通信...您在 Telnet 方面的表现如何?
  • 我用过telnet接口。问题是从成千上万的密钥中找到我想要的密钥。

标签: php session memcached


【解决方案1】:

最终用户应该在他们最后一次向服务器发出请求后的设定时间退出应用程序。每次客户提出请求时,他的到期时间都会重置。如果到期时间为 3 分钟,并且您每 2 分钟发出一次请求,那么您的会话将永不过期。

【讨论】:

  • 您可以检查 memcache 条目以查看过期时间是否设置为您所期望的。 This 描述了 memcache 存储其会话密钥的位置。我不知道您的应用是如何构建的,但某些框架会设置辅助 cookie,以便在用户会话到期后自动登录(“记住我”设置)。
猜你喜欢
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多