laravel session的过期问题

在项目中我设置的session过期时间为30分钟(1800秒),我是把session存到redis里面的
当session还剩1000秒过期的时候我申请了一个接口,这个接口会向session中写入数据。等到接口调用完以后我发现session的剩余时间为1798秒,也就是说在我写入session后,session的过期时间又被重新设置成了1800秒,不知道小伙伴们有没有遇到过此问题

阅读 8.4k
2 个回答

自己回答一下。无论是php的session还是laravel中的session,他们的过期的机制是一样的。
以前一直以为如果把session的过期时间设置为1800s,那么session在经历1800以后就过期了。事实是,一旦我们的代码里有session_start()(在session.auto_start = 1 的时候自动调用),session的过期时间就会重新设置为1800s.也就是说如果我们一直使用session里的数据,无论读还是写,session都不会过期。一旦你不再读或者写入session一段时间,并且这段时间大与session的过期时间(我这里是1800s),那么session就过期了.
建议大家使用redis存储session然后就可以通过ttl来了解session的过期问题。

session就是这样的, session原意是会话, 会话的有效期是指在用户最后一次请求开始多长时间无操作时就失效.
所以你的session有效期是1800秒, 但是你在1000秒的时候又做了操作, 所以本次会话并没有过期.

推荐问题
宣传栏