【问题标题】:How to manage multiple tabs with PHP如何使用 PHP 管理多个选项卡
【发布时间】:2013-07-05 03:00:18
【问题描述】:

我有一个应用程序,它使用几种不同的形式来执行各种操作。一些表单访问来自其他表单提交的数据。

例如:用户在一个表单上下新订单并在另一个表单中添加新项目,这些项目可以添加到订单中。

因此,这导致用户可能正在添加订单并意识到必须先添加商品。因此很自然地会打开一个新标签来执行此操作,而不是丢失添加到订单中的信息。

目前我有一个$_SESSION['form'] 变量,让表单处理脚本知道表单提交后要使用哪个函数。问题是打开多个选项卡时,此值将被最后打开的选项卡覆盖。我对如何处理这个问题有几个想法,但到目前为止还没有理想。

想法一:使用哈希值来识别不同的页面加载并将哈希作为隐藏字段发送

$hash = $_POST['hash'];
$form = $_SESSION[$hash]['form'];

问题:会话过载。每次加载表单时,该方法都会生成一个新的会话值,以唯一标识表单提交。我可以在提交时取消设置该值,但是如果加载了表单页面并且从不提交,或者页面刷新了怎么办。我希望会话尽可能地轻量级。

思路二:点击提交时使用AJAX设置$_SESSION['form']

问题:不使用 JS 的用户。如果可能的话,我希望能够继续为喜欢禁用 JS 的用户提供支持,尽管这种方法看起来可能会更好一些。但是,我不确定这里是否存在浏览器兼容性问题。

思路三:为每个窗口创建一个hash id

问题:PHP 无法区分浏览器选项卡。这将是迄今为止最理想的。

想法四:将表单处理脚本拆分为多个文件,从而无需使用值来选择要使用的函数。

问题:不方便,但如果它被证明是处理此问题的唯一真正方法,我对这个想法持开放态度。不过,这需要进行相当多的重组。

关于如何在 PHP 中安全地管理不同的选项卡和会话信息有什么想法吗?

【问题讨论】:

    标签: php forms session tabs


    【解决方案1】:

    这只是我的意见,但我会使用想法 #1——每次加载表单时,给它一个随机散列(只需 md5 的 time() + 随机数就足够了),然后跟上那些散列就像它们是唯一的窗口标识符。

    是的,它可能会使您的会话有点膨胀,但如果它不会减慢用户的体验,我不会担心。如果它真的困扰您,您可以跟踪您为用户(在会话中)创建了多少个窗口 ID,并将其限制为 100 或 1000。这将防止恶意用户编写脚本来打开数百万个窗口.

    请记住,当用户的会话被破坏(通过注销/关闭浏览器)时,所有这些哈希值也都消失了。如果你真的很勤奋,你可以有一个哈希过期系统。比如,2 小时后他们将从会话中删除。

    但老实说——如果是我,我会把他们留在会议上,不用担心。

    只要我的 2 美分, 理查德

    【讨论】:

    • 我喜欢限制为 ~100 的想法,这可能会使应用程序扩展得相当好。我关心的不是一个会话的大小(尽管这是一个很好的观点),而是所有用户会话的总和(即如果有 10k 用户登录会怎样)。
    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2022-07-11
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2013-03-21
    相关资源
    最近更新 更多