我有一个应用程序,它使用几种不同的形式来执行各种操作。一些表单访问来自其他表单提交的数据。
例如:用户在一个表单上下新订单并在另一个表单中添加新项目,这些项目可以添加到订单中。
因此,这导致用户可能正在添加订单并意识到必须先添加商品。所以自然会打开一个新标签来执行此操作,而不是丢失添加到订单中的信息。
目前我有一个$_SESSION['form']
变量让表单处理脚本知道表单提交后使用哪个函数。问题是打开多个选项卡时,此值将被最后打开的选项卡覆盖。我对如何处理这个问题有几个想法,但到目前为止还没有什么理想的。
想法一:使用哈希值来识别不同的页面加载并将哈希作为隐藏字段发送
$hash = $_POST['hash'];
$form = $_SESSION[$hash]['form'];
问题:会话超载。每次加载表单时,该方法都会生成一个新的会话值,以唯一标识表单提交。我可以在提交时取消设置该值,但是如果加载了表单页面并且从不提交,或者页面刷新了怎么办。我宁愿保持会话尽可能轻。
思路二$_SESSION['form']
:点击提交时使用AJAX设置值
问题:不使用 JS 的用户。如果可能的话,我希望能够继续为喜欢禁用 JS 的用户提供支持,尽管这种方法看起来可能会更好一些。但是,我不确定这里是否存在浏览器兼容性问题。
思路三:为每个窗口创建一个hash id
问题:PHP 无法区分浏览器选项卡。这将是迄今为止最理想的。
想法四:将表单处理脚本拆分为多个文件,从而无需使用值来选择要使用的函数。
问题:不方便,但如果它被证明是处理这个问题的唯一真正方法,我对这个想法持开放态度。不过,这将需要进行相当多的重组。
关于如何在 PHP 中安全管理不同选项卡和会话信息的任何想法?