Laravel:从应用程序中注销/清除所有用户的所有会话
Posted
技术标签:
【中文标题】Laravel:从应用程序中注销/清除所有用户的所有会话【英文标题】:Laravel: Logout/clear all sessions for all users from app 【发布时间】:2016-08-07 09:53:28 【问题描述】:问题
我想为我的 Laravel 应用程序中的所有用户清除所有会话。
我尝试过的
我了解Auth::logout()
将注销单个用户,而不是所有用户。我还尝试从storage/framework/sessions
中删除会话文件。两者都没有工作。
我正在使用内置的 Authentication(例如 Auth
)和运行 Laravel 5.2 的会话的文件驱动程序。
如何有效地强制所有登录用户注销,以便他们必须重新登录?
【问题讨论】:
删除会话文件应该是一个很好的解决方案:如果会话的文件被删除,我无法弄清楚用户会话云如何保持活动状态.. 我自己测试过,清除会话文件夹中的所有文件会使所有用户退出我的应用程序。也许还有其他东西让他们保持登录状态? @MattMcDonald,一定有什么东西让他们活着,因为当我这样做时,他们仍然以某种方式通过了Auth::check()
...
你有没有找到任何解决方案?
我没有。我想我最终重命名了会话 cookie 或其他东西以使其无效。
【参考方案1】:
在 app/session.php 中你可以改变 cookie 的值,所以用户会因为 cookie 和配置不匹配而自动退出
【讨论】:
我在将会话更改为多个域时遇到了类似的问题。碰巧新旧cookie由于名称相同但域不同而发生冲突。我不确定这是否是原因,但结果是用户无法登录。在登录页面上,显然是成功的,但他再次被重定向到该页面,而不是遵循流程。解决方案是更改 cookie 的名称,通过旧 cookie 的名称添加检查,如果存在,则忘记它。【参考方案2】:值得注意的是,Laravel 实际上只将活动会话存储在会话文件夹中;那些被“记住”但没有主动访问您的应用程序的会话不计入这些会话中。因此,仅删除文件不会完成工作。
您还必须清除用户表中的所有记住令牌,因为此令牌与存储在 cookie 中的本地令牌一起使用,以在用户重新连接时重新创建会话。
【讨论】:
“记住令牌”正是问题所在。如果您是记住用户,则删除会话文件和清除用户表中的remember_token
列的组合将使所有以前的会话无效。
同意;对于任何其他驱动程序,您将要清除任何相关的存储区域,但我试图回答指定“文件”驱动程序的问题。以上是关于Laravel:从应用程序中注销/清除所有用户的所有会话的主要内容,如果未能解决你的问题,请参考以下文章
Cognito 注销流程未从浏览器中清除 ADFS 的 cookie