【问题标题】:How do php apps identify a user after the session has timed out?会话超时后,php 应用程序如何识别用户?
【发布时间】:2010-03-30 18:13:28
【问题描述】:

我正在尝试了解 PHP 应用程序如何检查用户是否已登录。我正在专门查看 mediawiki 的代码以帮助我理解,但这些情况在所有 php 应用程序中应该相当普遍。

据我所知,主要情况有:

  1. 一个刚刚登录或创建的用户,每次访问该页面时,PHP 通过检查 $_SESSION 变量和 cookie 共有的数据来了解他们。

  2. 很久以前,用户在登录页面上选中了“记住我”选项。他们在计算机上有一个带有 tokenID 的 cookie,使用服务器上的令牌对其进行检查以对其进行身份验证。在这种情况下,没有会话变量,因为访问之间的时间可能是几周。

我的问题是,当用户登录但 PHP 会话超时并且他想访问页面时会发生什么?我会假设服务器没有简单的方法知道这个人是谁 - 并且他们必须被重定向到登录页面。

但是,mediawiki 就是这样做的。我已经验证会话文件在 X 分钟后被删除,但是当我在 mediawiki 中点击刷新时,它知道我是哪个用户,并且 'token' 变量不包含在 cookie 中。

【问题讨论】:

    标签: php session mediawiki


    【解决方案1】:

    如果您不想在会话过期时重定向到登录页面,cookie 用户登录时创建的(选中“记住我" thing) 必须包含足够的信息才能重新创建会话

    重新创建会话意味着重新登录用户。

    这意味着 cookie 必须包含足够的数据来识别用户。


    当然,您不能将登录名 + 密码存储在 cookie 中,至少不能以明文形式存储,因为 cookie 会随每个 HTTP 请求通过网络;不会很安全。

    但是你必须找到一种方法来存储……足够的数据;比如登录名,可能还有某种哈希值,可以用来确定用户是否真的是 cookie 中的登录名。

    这里有几个可能很有趣的问题+答案,关于这个:

    【讨论】:

    • 只是为了扩展一点,您可以将哈希存储在数据库中的users 表中,就像lastLoginHash 由随机数生成一样。当它们返回时,您将根据数据库检查 cookie 中的用户名和此哈希值。如果它们匹配,则将它们登录,否则,将它们重定向。
    【解决方案2】:

    答案是饼干。当会话过期时,服务器除了浏览器发送的内容外,无法识别用户。因此,应用程序使用 cookie 数据透明地重建会话。如果 cookie 已过期或被删除,那么重定向到登录页面确实是唯一的选择。

    【讨论】:

    • 另请注意,cookie 可能只保存在内存中而不保存到磁盘中,因此您不一定会在 cookie 文件中看到令牌。在这种情况下,会话可以从内存中的 cookie 重新创建,但如果浏览器关闭,cookie 数据就会丢失,用户会被重定向到登录页面。
    【解决方案3】:

    好问题。嗯,大部分“记住我”功能是通过使用 cookie 实现的,存储一个验证用户的“令牌”。

    如果不这样做,并且没有 cookie 发送到服务器,唯一可能的方法是服务器根据一系列参数“猜测”是你。这些参数可能包括:IP、用户代理字符串等等……但这在许多情况下可能有效,但它不被认为是最佳实践,因为它代表了安全风险。前任。许多用户正在共享网络、代理服务器等......在最坏的情况下,这可能会使用户登录到其他人的帐户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 2013-02-19
      • 2023-01-25
      • 2020-02-25
      • 1970-01-01
      相关资源
      最近更新 更多