【问题标题】:Why are session variables retained between different users on the same PC?为什么同一台 PC 上的不同用户之间会保留会话变量?
【发布时间】:2014-07-16 10:19:59
【问题描述】:

我的 Laravel PHP 应用程序使用 Session::put() 存储各种用户界面状态。

我惊讶地发现会话变量似乎保留在按顺序登录一台 PC 的不同用户之间。例如:

  • 以 user1 身份登录,设置一些 UI 选项,退出
  • 以 user2 身份登录,期望看到默认的 UI 选项,实际上看到的是 user1 的选项

我已尝试使用本机和数据库会话驱动程序。

为什么在同一台 PC 上的不同用户之间保留会话变量?这不会被视为安全缺陷吗?这是 Laravel 或一般 PHP 问题,还是我的实现?正确的解决方案是什么?

【问题讨论】:

  • 注销后可能Session::regenerate(); 有帮助吗?
  • @DanFromGermany 不能解决问题。请参阅下面的答案。

标签: php session laravel


【解决方案1】:

为什么同一台 PC 上的不同用户之间会保留会话变量?

大概是因为他们正在注销您的应用程序,而不是操作系统的用户环境,并且也没有关闭浏览器。

这不会被视为安全缺陷吗?

这更像是最终用户的不良安全做法。

这是 Laravel 或一般 PHP 问题,还是我的实现?正确的解决方案是什么?

用户注销时清除会话数据。

【讨论】:

    【解决方案2】:

    为什么会话变量会在同一个不同用户之间保留 电脑?

    您误认为“会话”和“身份验证”。它们不是同一件事。 你可以在不登录 Laravel(或大多数 Web 应用程序)的情况下进行“会话”。

    当您登录到应用程序时,它会被简单地添加到您的 当前 会话中。但是,当您注销应用程序时,您的 当前 会话会继续,只是没有 auth 位。

    什么是正确的解决方案?

    如果你想清除所有数据的会话 - 你必须刷新它:

    Auth::logout();
    Session::flush();
    

    (注意 - 上面使用 Session::regenerate() 的评论建议不正确 - 这只会重新生成会话 ID - 而不是数据 - 它会保留)

    【讨论】:

    • 这很有帮助。我确实想到并非所有用户都会通过显式调用 logout 方法来注销(有些用户可能会在会话生存期到期时失效)。在进行身份验证之前立即刷新会话以捕获所有情况不是更安全吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2012-03-15
    • 2014-08-27
    • 1970-01-01
    相关资源
    最近更新 更多