我在生产环境中工作,用户经常被注销。有时候比其他时候更糟糕,但触发几乎总是在用户试图同时打开多个页面时。
会话存储用于身份验证的各种信息,包括登录字符串和用户ID。如果身份验证失败,则会将用户重定向到登录页面。
我已经实施了一些检查,看看发生了什么;
我检查以确保会话已使用session_status
启动。这回来时有一个活跃的会话。
我也尝试输出会话变量,但是它们返回时没有设置。
我也比较会话ID,与前一个不同。
我没有对所有PHP配置的完全访问权限,但我知道会话设置为在5小时后过期,但是会话被更频繁地破坏,有时在几分钟内。
我可以采取哪些可能的原因或其他故障排除步骤来解决此问题?
我们正在使用自定义会话功能,并且每次都会重新生成会话(禁用此功能无法解决问题)。功能是:
function sec_session_start() {
$session_name = 'sec_session_id'; // Set a custom session name
$secure = SECURE;
// This stops JavaScript being able to access the session id.
$httponly = true;
// Forces sessions to only use cookies.
if (ini_set('session.use_only_cookies', 1) === FALSE) {
header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
exit();
}
// Gets current cookies params.
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);
// Sets the session name to the one set above.
session_name($session_name);
session_start(); // Start the PHP session
session_regenerate_id(); // regenerated the session, delete the old one.
}
答案 0 :(得分:0)
检查您的会话到期时间。默认情况下,每次启动php脚本时都不会清除php on-disk会话(请参阅http://php.net/manual/en/session.configuration.php#ini.session.gc-probability),因此在低容量网站上, 所拥有的会话非常有可能过期被视为有效,而在繁忙的站点,这不太可能,因为会话垃圾收集器有更多的机会运行。