在会话超时后,php应用程序如何识别用户?

时间:2010-03-30 18:13:28

标签: php session mediawiki

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

从我收集的内容来看,主要案例是:

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

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

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

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

3 个答案:

答案 0 :(得分:4)

如果您不希望在会话过期时重定向到登录页面,则用户登录时创建的 (检查“记住我” “东西” 必须包含足够的信息才能重新创建会话

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

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


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

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

以下是一些问题+可能有趣的答案,关于此:

答案 1 :(得分:1)

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

答案 2 :(得分:0)

Goo问题。好吧,主要是“记住我”功能是通过使用cookie实现的,存储验证用户的“令牌”。

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