Thinkphp5.1 Session失效问题解决方案
2022-07-28 14:14:58
199
{{single.collect_count}}

问题描述:

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

解决过程:

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


分析可能是是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的有效期设置为浏览器关闭。

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

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

ps:

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

参考:


PHP手册

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}