【问题标题】:Is there any way to check if Laravel Session with particular SessionId exists有没有办法检查具有特定 SessionId 的 Laravel Session 是否存在
【发布时间】:2018-10-10 05:29:06
【问题描述】:

当用户更改密码时,我想使其所有其他会话(当前会话除外)无效,从而从所有其他设备注销用户,为此,我关注this answer's strategyfile driver,通过仅将用户的sessionIds 存储在数据库中以跟踪用户的会话。

现在,使用 Laravel 5.1,我们可以获取带有 \Illuminate\Support\Facades\Session::getId() (API) 的 SessionId,但是有没有办法检查带有任何特定 sessionId 的 Session 是否存在?

我见过 Laravel,通过使用 sessionId 命名会话文件来创建会话文件,因此作为最后一个选项,我可以检查是否为 file_exists(sessionId),但我想知道是否还有其他方法?

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.1


    【解决方案1】:

    如果您使用的是 Laravel 5.6 及更高版本,它可以让您开箱即用。 You can read the documentation on it here 但这是它的要点。

    首先,将\Illuminate\Session\Middleware\AuthenticateSession::class 添加到您的中间件堆栈中。它应该已经存在但被注释掉了(这就是它在 Laravel 中的发布方式)。然后,当用户更改密码时,您应该将其传递给Auth::logoutOtherDevices($password)

    Laravel 在会话中保留密码的哈希副本,因此当密码更改时,中间件将强制注销任何具有旧密码哈希的会话。最好使用这个内置功能,而不是尝试使用自己的功能。

    【讨论】:

    • 如果升级到 5.6 不是您的选择,我建议您浏览 AuthenticateSession 中间件和 Auth 保护的源并将相关代码复制到您的项目中。它仍然可以让您不必重新发明轮子,这意味着如果您确实迁移到 5.6,您可以直接删除该代码。
    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多