我有一个PHP脚本(脚本A ),它对数据库进行查询,将结果存储在会话变量中并生成一个HTML页面,其中包含允许用户发布提交的表单(任选)。提交后,存储在会话变量中的结果将用于另一个脚本(脚本B )中的处理。
由于HTML页面不是唯一的,因此用户可以打开多个标签,显示脚本A 生成的不同页面。由于会话变量只能保存最新生成的页面的数据,因此当用户单击任何先前的选项卡并执行提交时,将使用错误的会话数据集。
防止这种情况发生的一种方法是强制页面在提交之前自动重新加载。有没有更好的安全方法来执行脚本B 中重新查询数据库的方法?
答案 0 :(得分:2)
生成一个秘密令牌及其散列。
将秘密令牌添加到$_SESSION
。
将哈希添加到表单中作为隐藏的输入元素。
在提交时,从$_SESSION
中的秘密令牌创建哈希。
将其与提交的哈希进行比较。如果它不匹配,您知道您的会话表单错误。
您可以通过使用$_SESSION
:
$_SESSION[$hash] = your form data
然后,您甚至可以正确处理多个表单(和多个表单实例)。
答案 1 :(得分:0)
对数据库进行查询的PHP脚本(脚本A),将结果存储在会话变量
中
为什么?存储您已有的数据有什么意义?
提交后,存储在会话变量中的结果将用于另一个脚本(脚本B)中的处理
为什么?为什么你不能直接将表格提交给B?
我认为在这里使用会话毫无意义。或者至少根据您当前的描述。