Thinkphp5.1 Session失效问题解决方案

问题描述:

Thinkphp5.1 启用session生效时间为1天。偶发性session没有到一天就失效了。

解决过程:

session不设置失效时间是。正常。
继续查找发现session设置生效时间,cookie级联设置了生效时间为1小时。(用谷歌浏览查看cookie)


Thinkphp5.1 Session失效问题解决方案_第1张图片

分析可能是是cookie到期后失效,导致cookie里sessionId没有了。导致session失效。

尝试解决:

  • 1.修改tp的源代码去掉这一样,问题消失。
 if (isset($config['expire'])) {
            ini_set('session.gc_maxlifetime', $config['expire']);
          //  ini_set('session.cookie_lifetime', $config['expire']);
  }

分析这里设置了cookie的有效时间。

  • 2.由于不能直接改tp源码。尝试ini_set(‘session.cookie_lifetime’,0) 放到开始的方法里; 结果,cookie一样会设置失效时间。

  • 3.继续查找没有setcookie的地方,猜测PHPsessionId的cookie是自动生成的。 尝试在每次请求后手动更新下cookie的生效时间。 seccokie(session_name(),session_id(),0);
    依然失败。

  • 4.查询百度和查看php手册后,猜测cookie里的PHPsessionId可能是session_start()的时候生成sessionId时同时种下的。
    继续查找tp源码。 配置里 自动启用session。 所有 之前重新设置cookie
    有效期的配置失败。继续研究。发现可以改成手动启用seession。

// 原来的
  //‘auto_start’=>true;
  //$this->start();

   //配置改成
  ‘auto_start’=>false;
   //登录入口改成
   ini_set('session.cookie_lifetime',0);
   Session::start();

问题解决。cookie的有效期设置为浏览器关闭。
Thinkphp5.1 Session失效问题解决方案_第2张图片

  • 5.总结
    -每次刷新浏览器session的有效期会重新计时,cookie的 phpsessonid不会。所以第一次设置的时候最好长一点或者岁浏览器关闭。
    设置的太长,每次关闭浏览器,cookie依然存在,不用重新登录。如百度的。

    Thinkphp5.1 Session失效问题解决方案_第3张图片

    session和cookie是协作生效的。cookie 失效后,session也就失效了。

ps:

 // session和cookie 的使用:
        $_SESSION['name']
	$_SESSION['name']='value'$_COOKIE['name']
	setcookie('name','value',3600);

	//下载
	header('','');
	redfile($path);

参考:


PHP手册

你可能感兴趣的:(PHP)