【问题标题】:Sessions ending prematurely会话提前结束
【发布时间】:2012-08-29 18:20:37
【问题描述】:

我们最近从运行 xamp 的 Windows 2003 服务器迁移到运行 PHP 版本 5.3.3 的 apache 的 Centos 服务器。

最初,问题是用户在大约 24 分钟后退出,因此我更改了 INI 变量 session.save_path,从而解决了问题。然而,一些用户仍然会定期退出我们的网站,似乎是随机的。它发生在多个用户在不同时间使用不同浏览器的情况。有时在页面闲置之后,但有时在从一个页面浏览到另一个页面时。

这是我们与会话相关的 INI 设置:

    session.save_handler = files  
    session.save_path = "/var/sessions"  
    session.use_cookies = 1  
    ;session.cookie_secure =  
    ;session.use_only_cookies = 1  
    session.name = PHPSESSID  
    session.auto_start = 0  
    session.cookie_lifetime = 86400  
    session.cookie_path = /  
    session.cookie_httponly =  
    session.serialize_handler = php  
    session.gc_probability = 1  
    session.gc_divisor = 1000  
    session.gc_maxlifetime = 86400  
    session.bug_compat_42 = Off  
    session.bug_compat_warn = On  
    session.referer_check =  
    session.entropy_length = 0  
    session.entropy_file =  
    ;session.entropy_length = 16  
    session.cache_limiter = nocache  

起初我认为这可能是浏览器中的 cookie 存在问题,因为其中一个用户将他的 cookie 设置为永不过期,即使代码将 cookie 设置为 24 小时后过期。但是,在删除 cookie 并让他重新登录后,它将 cookie 正确设置为 24 小时,并且他遇到了同样的过早注销的问题。

我创建了一个 cron 作业脚本,该脚本在每天凌晨 4 点删除所有会话,因为会话已从 tmp 目录中移出。

我今天发现服务器上的会话并没有被删除,但是当用户重新登录时正在创建一个具有新会话 ID 的新会话,即使他们在服务器上仍然有一个现有会话。

任何帮助将不胜感激。

【问题讨论】:

  • 根据我的经验,如果用户使用 IE,浏览器会忽略您的会话过期设置并自行处理。你确定不是这样吗?
  • 一个可能很愚蠢的问题 - 您的服务器的日期、时间和时区是否正确?我假设你已经检查过了,但询问没有任何成本。
  • 是的,服务器日期和时间都正确,php date.timezone = "America/Los_angeles"。我们有使用 IE8 和 Firefox 14 的用户都遇到了这个问题。 gc_maxlifetime 变量应该无关紧要,因为我将 session.save_path 设置为不同的值,但我将值设置为持续 24 小时,与 cookie 持续时间相同。创建 cookie 时,它​​们确实有 24 小时的到期时间。我查看了 Grzegorz 的链接,但没有看到它有什么帮助。
  • @Ivaughan:如果链接没有帮助,抱歉。当 Gumbo 说人们使用的方法不可靠时,我认为它可能会发生。我唯一想到的,请注意,我从来没有遇到过你遇到的这个问题,就是会话 ID 发生了变化。现在我什么都没有想到。

标签: php session


【解决方案1】:

问题似乎是由于我的服务器删除会话后我的 cookie 过期引起的。

我有一个脚本设置,每天早上 4 点从服务器手动删除会话,但是我的 cookie 设置为持续 24 小时。因此,即使在用户重新登录网站并在服务器上创建新会话后,cookie 的到期时间也没有更新。

我将 cookie 持续时间减少到 12 小时,这样 cookie 将始终在用户下次需要登录之前过期,并且问题已经消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2015-02-04
    • 2016-11-18
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    相关资源
    最近更新 更多