【发布时间】:2011-04-14 04:57:44
【问题描述】:
我有一个这样设置的会话变量:
<?php
$token = md5(uniqid(rand(), true));
session_start();
$_SESSION['token'] = $token;
print $_SESSION['token'];
?>
然后在另一个页面上我有这个:
<?php
session_start();
print $_SESSION['token'];
?>
问题是它们不匹配。我得到两个完全不同的字符串。 register_globals 已关闭。我确实注意到,当我将md5(....) 设置为常量字符串时,例如:md5('example'),它按预期工作并且两个字符串匹配。但这应该没关系。关于这里发生了什么的任何想法?
编辑:Apache 访问日志:
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /index.php HTTP/1.1" 200 3182 "-" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3"
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /style/style.css HTTP/1.1" 304 - "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3"
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /js/signup.js HTTP/1.1" 304 - "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3"
127.0.0.1 - - [18/Sep/2010:17:46:09 -0500] "GET /index.php HTTP/1.1" 200 3182 "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3"
127.0.0.1 - - [18/Sep/2010:17:46:10 -0500] "GET /index.php HTTP/1.1" 200 3182 "http://cmb.local:8888/index.php" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.59 Safari/534.3"
我不太确定如何阅读它,但在我看来,我的文件(我认为是“/”的 index.php)被调用了 3 次。我读对了吗?那里发生了什么?
【问题讨论】:
-
我无法重现这种行为。检查您的访问日志,并提供有关您正在使用的环境的更多详细信息。很明显,提供的代码不是整个系统,您可能正在另一个地方重置该令牌。
-
已知某些浏览器插件会导致发送多个请求而不是一个请求的行为。
-
@Josh K 我不是……现在两个页面都是静态的。唯一设置或更改的是令牌,并且只发生在一个地方,如上所示。
-
@James 没有浏览器插件,我网站上的所有其他页面也只收到一个请求。
标签: php session session-variables