PHP 会话变量改变
PHP Session variable changing
我正在处理 php 中的一个奇怪问题,我将放一个简化的脚本。
我想为每次访问索引时的每次访问生成一个随机字符串,并在索引的开头检查它是否与之前的相同。问题是我在文件末尾设置的值不是我在开始时得到的值,值不同!!
这从来没有发生在我身上,任何人都可以告诉我可能发生的事情吗?我有 .htaccess,它总是将任何请求重定向到 index.php,但我想这与这个问题无关。我已经检查过会话 ID 是否相同,但我不明白为什么会这样。
我的索引只有这个:
session_start();
echo session_id();
echo "<p><hr /></p>";
echo "IN SESSION:<br />".$_SESSION['formToken'];
echo "<p><hr /></p>";
echo ".......";
//Secure Form Tokens
unset($_SESSION['formToken']);
$_SESSION['formToken'] = rand();
echo "<p><hr /></p>";
echo "END SESSION:<br />".$_SESSION['formToken'];
输出第一个输出是:
rkvuu0ohghdsl32otkj5o28qt4
IN SESSION: 1242741993 ...
END SESSION: 562913922
如果我刷新页面,第二个输出应该是 IN SESSION 在 END SESSION 中设置的旧值,但它不是,这是一个完全不同的值!!!
rkvuu0ohghdsl32otkj5o28qt4
IN SESSION: 188673004 (IT SHOULD BE THE PREVIOUS END SESSION
562913922) ...
END SESSION: 525826707
您似乎正在接近 CSRF 概念。如果您已经在使用 HTTPS,则无需更改每个请求的 CSRF。如果他使用多个选项卡,这将破坏用户体验。而是为每个会话 and/or 每个唯一表单生成一个 CSRF。
.htaccess that always redirect any request to index.php,
事实上,这可能是个问题。浏览器即默认请求 favicon.ico。如果每个请求都重定向到 index.php,这将生成一个新令牌。
考虑查看您的浏览器开发人员控制台并检查您的网络选项卡。
问题是 favicon 文件不存在,服务器两次重定向到 index.php(.htaccess 上的指令),如果文件存在,它不会重定向。
所以我在我的项目中添加了一个 favicon.ico 并开始工作。
感谢@Lawrence Cherone 和@CBroe
我正在处理 php 中的一个奇怪问题,我将放一个简化的脚本。
我想为每次访问索引时的每次访问生成一个随机字符串,并在索引的开头检查它是否与之前的相同。问题是我在文件末尾设置的值不是我在开始时得到的值,值不同!!
这从来没有发生在我身上,任何人都可以告诉我可能发生的事情吗?我有 .htaccess,它总是将任何请求重定向到 index.php,但我想这与这个问题无关。我已经检查过会话 ID 是否相同,但我不明白为什么会这样。
我的索引只有这个:
session_start();
echo session_id();
echo "<p><hr /></p>";
echo "IN SESSION:<br />".$_SESSION['formToken'];
echo "<p><hr /></p>";
echo ".......";
//Secure Form Tokens
unset($_SESSION['formToken']);
$_SESSION['formToken'] = rand();
echo "<p><hr /></p>";
echo "END SESSION:<br />".$_SESSION['formToken'];
输出第一个输出是:
rkvuu0ohghdsl32otkj5o28qt4
IN SESSION: 1242741993 ...
END SESSION: 562913922
如果我刷新页面,第二个输出应该是 IN SESSION 在 END SESSION 中设置的旧值,但它不是,这是一个完全不同的值!!!
rkvuu0ohghdsl32otkj5o28qt4
IN SESSION: 188673004 (IT SHOULD BE THE PREVIOUS END SESSION 562913922) ...
END SESSION: 525826707
您似乎正在接近 CSRF 概念。如果您已经在使用 HTTPS,则无需更改每个请求的 CSRF。如果他使用多个选项卡,这将破坏用户体验。而是为每个会话 and/or 每个唯一表单生成一个 CSRF。
.htaccess that always redirect any request to index.php,
事实上,这可能是个问题。浏览器即默认请求 favicon.ico。如果每个请求都重定向到 index.php,这将生成一个新令牌。
考虑查看您的浏览器开发人员控制台并检查您的网络选项卡。
问题是 favicon 文件不存在,服务器两次重定向到 index.php(.htaccess 上的指令),如果文件存在,它不会重定向。
所以我在我的项目中添加了一个 favicon.ico 并开始工作。
感谢@Lawrence Cherone 和@CBroe