【发布时间】:2015-02-24 00:58:31
【问题描述】:
我遇到了一个问题,当用户闲置超过 24 小时(我的会话超时),或离开站点然后在 24 小时后返回时,他们并没有被从站点注销,而是他们的会话即将过期,或者至少它们的 _token 不再有效。
这会导致不必要的行为,就好像用户在他们的 _token 过期后提交了一个表单,他们现在收到了一个TokenMismatchException。
在本地看来,当空闲时间超过会话生命周期时,用户将被注销,但在实时服务器上的生产中,情况并非如此,空闲时间可以超过会话生命周期,但用户仍处于登录状态如果用户登录,Auth::check() 和 Auth::user() 都会按预期运行。
什么会导致用户即使会话已过期也无法退出?
有没有一种方法可以检查会话是否已过期,以便我可以手动注销用户并显示一条消息,要求他们重新登录?
我尝试使用App::before 过滤器来检查会话上的 last_activity 并确定它是否已过期,但是一旦会话过期,我就无法再访问它,因为它已从数据库中删除,因此我无法比较时间戳以确定用户是否需要手动注销并提示重新登录。
我的会话配置:
'driver' => 'database',
'lifetime' => 1440,
'expire_on_close' => false,
谢谢。
【问题讨论】:
-
您是否有可能覆盖默认值的 config/production/session.php 文件?
-
不,我只有一个用于开发的 config/local/session.php,然后是用于生产的默认 config/session.php。我应该补充一点,除了“生命周期”的价值之外,这两者相互镜像,这在开发测试中要短得多。
-
这正是面临的问题。您是否找到任何解决方案或解决方法?
-
我无法找到问题的原因或解决方案。我有一些用户向我表示他们没有遇到这个问题,这增加了额外的复杂性,它不会影响所有用户,只会影响一些用户,包括我自己。