背景
最近接手维护了一个网站,后端api使用的框架是thinkPHP5,版本号是 5.0.22,网站的登陆是cookie、session机制,session的存储介质是redis,设置的是30min过期。
偶尔有用户反馈还没到半小时,为啥session就过期,自动跳转到了登陆界面,需要他重新登陆。
emmm,客户的表达,其实是用户从自身的时间感知层面说了一个现象。
但是问题就在于每个人在不同的精神状态下对时间的感知是有差别的,典型的例子是,人在进入心流状态后,会觉得时间过得飞快。
那么,我们怎么证明thinkPHP5框架对于session的操作是正确的呢?正确性主要是针对,用户登录后,过几分钟再操作界面,触发了后端一些api,session的过期时间会不会被重置为30min?!
下面开始我们的探究过程。
探究
我们怎么做个小实验来证明,用户登录后,隔一段时间(小于30min),触发后端需要登录后才能访问的api,session的过期时间是被刷新或则叫重置为30min呢?
下面我实验的截图,是在线上服务器的redis docker容器内做的实验:

那么,到这里我们初步可以断定thinkPHP5框架对于存储介质是redis的session的刷新操作是没得问题的。
这时,用户又提出隔一段时间操作的api是否可能存在个体操作差异,比如:我此处做实验操作的api是Task控制器下的getTaskList方法,那么你怎么证明登陆后的用户,触发任意后端api都会去刷新session的过期时间呢!!!
emmm,你还别说,真把我给问住了,吸口氧气,冷静一下!
其实,客户问到了框架底层刷新session过期时间的原理,或则说白了就是框架源码的逻辑是怎么刷新或叫重置了session的时间,避免sessio

本文详细探讨了ThinkPHP5框架下使用Redis作为session存储介质时,session过期时间的刷新机制。通过实验验证了框架在用户操作后能正确刷新session的过期时间,并分析了session与cookie的交互,发现cookie的过期时间未随session刷新,可能导致用户提前被登出的问题。最后,提出了将cookie设置为会话级以解决此问题。
最低0.47元/天 解锁文章
1034

被折叠的 条评论
为什么被折叠?



