2011-01-25 31 views
0

当用户在另一个窗口/选项卡上打开另一个页面时,会导致冲突。那么如何防止这些冲突呢?一种方法是为每个页面设置相同的会话。每次用户注销/登录会话都将被重新生成。更改每个页面请求的会话是否很重要?

<?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>'; 
?> 

令牌将从div.token传递给jQuery执行ajax请求。但是当用户打开另一个选项卡时,新会话被设置,然后另一页返回'无效请求'错误。

+0

你的意思改变会话ID?为什么你需要为每个页面加载重新生成一个新的?为什么它会在新选项卡上导致问题 - 所有网址都有令牌? – alex 2011-01-25 00:46:37

+0

是的所有页面都有令牌,将用于ajax请求和表单提交 – kornesh 2011-01-25 00:56:33

回答

1

打开多个页面或选项卡不应干扰会话。如果确实如此,那么您可能会在会议中投入太多。

你在会议中存储什么?这听起来像你可能在URL中的会话中存储了一些东西。

编辑:看到你的编辑后,您可能想看看在这个问题上的回答:

PHP - CSRF - How to make it works in all tabs?

相关问题