在Web浏览器上打开多个选项卡时传输正确的会话数据

时间:2011-10-12 14:03:28

标签: php

我有一个PHP脚本(脚本A ),它对数据库进行查询,将结果存储在会话变量中并生成一个HTML页面,其中包含允许用户发布提交的表单(任选)。提交后,存储在会话变量中的结果将用于另一个脚本(脚本B )中的处理。

由于HTML页面不是唯一的,因此用户可以打开多个标签,显示脚本A 生成的不同页面。由于会话变量只能保存最新生成的页面的数据,因此当用户单击任何先前的选项卡并执行提交时,将使用错误的会话数据集。

防止这种情况发生的一种方法是强制页面在提交之前自动重新加载。有没有更好的安全方法来执行脚本B 中重新查询数据库的方法?

2 个答案:

答案 0 :(得分:2)

生成一个秘密令牌及其散列。

将秘密令牌添加到$_SESSION

将哈希添加到表单中作为隐藏的输入元素。

在提交时,从$_SESSION中的秘密令牌创建哈希。

将其与提交的哈希进行比较。如果它不匹配,您知道您的会话表单错误。

您可以通过使用$_SESSION

中的哈希键入数据来扩展它
$_SESSION[$hash] = your form data

然后,您甚至可以正确处理多个表单(和多个表单实例)。

答案 1 :(得分:0)

  

对数据库进行查询的PHP脚本(脚本A),将结果存储在会话变量

为什么?存储您已有的数据有什么意义?

  

提交后,存储在会话变量中的结果将用于另一个脚本(脚本B)中的处理

为什么?为什么你不能直接将表格提交给B?

我认为在这里使用会话毫无意义。或者至少根据您当前的描述。