【发布时间】:2013-11-25 09:25:36
【问题描述】:
通常当我设计一个允许用户登录的站点时,我会从数据库中创建用户信息的会话变量,并确保站点的每个页面上至少有一个会话变量可用,否则用户将像这样重定向到登录页面:
if(!isset($_SESSION['username']))
{
header("Location:login.php");
}
但是我最近一直在想,与其使用会话变量来验证用户,不如使用查询字符串。我的想法是创建一个基于某些因素的唯一字符串,例如date(month, year, day) 或access time(day, hour) 或ip address,也许hash 它使用md5,所以网址可能看起来像这样
://mysite.com/dashboard?auth=12jsdnnau819wiskj3jdnck23ksj12j3.
因此,如果用户超过一小时或超过一天未访问该站点,我现在可以轻松注销该用户。但我不知道这是否是一个好主意,这就是为什么我在这里,寻求更好的方法的建议。谢谢大家。
【问题讨论】:
-
为什么不将访问时间戳存储为会话变量?
-
为什么不使用会话过期策略?在内部,Web 会话以类似的方式维护 - 通过传递给请求的会话 id 或存储在浏览器中的会话 cookie
-
不,这不是一个好主意。这与注销用户有什么关系?
-
这可行,但将这些数据存储在 cookie 中同样容易。而且,通过不使用可变查询字符串使您的 URL 混乱,您将使您的网站对搜索引擎更友好。
-
另外,session仅限于单个浏览器,一个url可以在不同浏览器和电脑之间扩展session,这是不行的。如果您将身份验证网址发送给朋友,例如通过 Skype,他/她将使用您的帐户登录
标签: php session query-string