会议在高流量时被销毁

时间:2015-06-01 14:32:28

标签: php session

我在生产环境中工作,用户经常被注销。有时候比其他时候更糟糕,但触发几乎总是在用户试图同时打开多个页面时。

会话存储用于身份验证的各种信息,包括登录字符串和用户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. 
}

1 个答案:

答案 0 :(得分:0)

检查您的会话到期时间。默认情况下,每次启动php脚本时都不会清除php on-disk会话(请参阅http://php.net/manual/en/session.configuration.php#ini.session.gc-probability),因此在低容量网站上, 所拥有的会话非常有可能过期被视为有效,而在繁忙的站点,这不太可能,因为会话垃圾收集器有更多的机会运行。