【发布时间】:2011-06-14 21:40:55
【问题描述】:
当用户在另一个窗口/选项卡上打开另一个页面时会导致冲突。那么如何防止这些冲突呢?一种方法是为每个页面设置相同的会话。每次用户注销/登录时,会话都会重新生成。
<?php
//every page sets its own session if its not ajax so that it dont expire
if(is_ajax()){
$_SESSION['token'] = md5(rand());
}
echo '<div id="token">'.$_SESSION['token'].'</div>';
?>
tokens 将从 div.token 传递给 jquery 执行 ajax 请求。但是当用户打开另一个选项卡时,设置了新会话,然后另一个页面返回“无效请求”错误。
【问题讨论】:
-
你的意思是改变会话ID吗?为什么每次页面加载都需要重新生成一个新的?为什么它会导致新标签页出现问题 - 所有 URL 都有令牌吗?
-
是的,所有页面都有将用于 ajax 请求和表单提交的令牌
-
任何人!?至少任何其他 CSRF 保护 AJAX 请求的方法