【发布时间】:2014-11-06 13:03:11
【问题描述】:
我们使用带有 Memcached 的外部 Ubuntu 服务器作为会话存储。自从我们从数据库会话切换后,我们收到了来自正在注销的用户的随机投诉。
问题:
- 用户在会话到期之前被注销。在某些情况下,他们在登录后一两分钟就会被注销。
- 我们的网络服务器日志或 Memcached 日志中没有出现任何错误。
- 他们的会话 ID 在注销后保持不变。
今天,我们的一位用户偶然发现了一种重现该行为的方法。在允许他们设置自定义日期范围的页面上,他们反复按下“前一天”按钮,每次点击都会发送一个 POST 请求。例如,如果您单击该按钮 20 次,它将发送 20 个 POST 请求,其中 19 个将在最后一个成功完成之前被取消。一旦最终请求完成,似乎所有会话变量都丢失了。
我的 php.ini (CGI) 设置:
session.save_handler = memcache
session.save_path = "tcp://OURSERVERIP:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
注意:POST 请求正在加载同一域中的 iframe。
更新:似乎也遇到了用户以彼此身份登录的问题。会话 ID 冲突?
【问题讨论】:
-
@derp 不幸的是,日志并没有提供太多帮助,这让这变得如此令人沮丧。我将在几秒钟内为 Memcached 添加我的 php.ini 设置。
-
也许你已经有了,但我还是想提一下在开始之前给
session_name('myproject')。 -
你在使用session_regenerate_id()吗?
-
@JasperN.Brouwer 我直到前天才起床。还引入了基于用户代理的会话令牌,只是为了避免冲突。
-
我们在使用 floatbox 2.45 时遇到了类似的问题,服务器中缺少一对图像。我们看到其中 4 个是 404。只有在 IE11 和 Edge 中,我们才能复制间歇性发生的问题。一旦我们添加了图像问题就消失了;)