我有一个相当大的 PHP 应用程序(数千个唯一 URL、具有各种角色的用户登录等)PHP 在 php.ini 中将会话超时设置为 1 小时(3600 秒)。登录的工作方式是这样的:当用户成功登录应用程序时,关于用户的一些信息会存储在 $_SESSION 中,包括用户名、真实姓名、角色 id 等。在每个页面访问(通用代码)上,$ _SESSION 检查这些变量,如果它们存在,用户就去他们要求的地方。如果变量不存在,则用户将被重定向到“未登录”页面。
在过去的几年里,这一直运行良好,并且仍然运行良好 - 主要是。会话似乎非常随机地超时,没有任何警告或其他任何东西。对于已登录的用户,这看起来像这样:登录,做某事,导航到下一页 - 然后退出并返回“未登录”页面。自然,这非常烦人。然而,这种行为的随机性使得调查变得极其困难。
我从来没有在我的机器上用任何浏览器体验过它。办公室里有另一台机器,每个浏览器都会出现这种情况(至少我可以重现这个问题)。在另一台机器上,它发生在一个浏览器中,而不发生在另一个浏览器中。然而在另一台机器上它有时会发生而不是其他时候。今天我们接到了一位遇到此问题的客户的电话 - 但当要求在不同的浏览器中尝试时,它工作正常。
这与浏览器的版本无关,因为它可以在某些机器上运行,而不能在具有相同版本的其他机器上运行。此外,拥有两台相同设置的机器,有时会发生在一台机器上,但从不会发生在另一台机器上。所以总的来说,会议似乎发生了一些非常非常奇怪的事情,但我完全不知道该去哪里看。在过去几个月的大部分时间里,我一直在尝试对此进行调查,但一无所获。还有哪里可以看?
在这一点上,任何帮助都非常感激。
添加:这是我的 php.ini 的会话部分:
[Session]
session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_divisor = 100
session.gc_maxlifetime = 3600
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4