会话显示突然的行为

10 php cookies session logout

我的php会议显示出异常行为.情况:

  • 用户登录(https://example.com)应用程序
  • 会话cookie有效期设置为7天.(从浏览器cookie生命周期验证)
  • 用户移动到另一个域(没有https)
  • 当用户通过单击应用程序链接尝试在某个时间后返回时,会话将被销毁.
  • 这种行为是突然的.有时,它保持有效.

以下是我开始会议的方式:

if(!$this->session_manager_issession_set()) {
            $this->set_ini_config();
            session_name($this->session_manager_name);
            session_set_cookie_params($this->session_cookie_life, "/"); //Required for browser cookie cleanup
}

session_start();

if(empty($_SESSION))
    {
        $output['status']   =   false;
    }
    else{
       // Fetch the variables
    }

public function session_manager_issession_set(){
        $output =   true;

        $session_status =   session_status();
        switch($session_status){
            case PHP_SESSION_ACTIVE :

            break;
            default:
                $output =   false;
        }

        return $output;
    }

private function set_ini_config(){
    $output =   true;

    ini_set('session.gc_probability', 1);   //If session expires then ensure that session is flushed and cleared at all instances
    ini_set('session.gc_divisor', 100);     //If session expires then ensure that session is flushed and cleared at all instances

    ini_set('session.gc_maxlifetime', 7*24*60*60);  //MAx life of session cookie
    ini_set('session.cookie_secure', true);

    return $output;
}
Run Code Online (Sandbox Code Playgroud)

这可能是什么原因?我是否以错误的方式实施了会话?

Web*_*eng 0

正如您在问题和评论中提到的,用户不仅移动到不同的域,而且完全移动到不同的服务器(因此从 到 的更改httphttps我们读者来说更有意义)。是保存在服务器上的$_SESSION超全局变量,因此更改服务器是您的价值被破坏的最可能原因。$_SESSION

事实上,它可能仍然存在,但由于您尝试从不同的服务器访问它,服务器找不到它,因此导致您(或服务器)相信它已被破坏(因为它存在于原始服务器上)启动会话的服务器)。这可以解释为什么它有时有效有时无效,因为您可能在服务器之间切换,有时您很幸运并且位于最初创建会话的同一服务器上。