多个浏览器选项卡和PHP的“后退”按钮

时间:2013-04-29 14:27:02

标签: php

我正在编写一个应用程序来驱动多个路由器中的配置命令的执行。 以下是它的设计方法:

  Page 1            Page 2            Page 3                                             
+--------+        +--------+        +--------+
|  data  |  PRG   |  data  |  PRG   | steps  |
| enter  |------->| review |------->| exec   |---+
|  page  |        |  page  |        | page   |   |
+--------+        +--------+        +--------+   | Ajax
                                        ^        |
                                        |        |
                                        +--------+
  1. 用户填写第一页上的表单。
  2. 系统会获取更多数据并在第二页上以其他形式显示以供审核。
  3. 使用Ajax请求从第三页执行配置步骤。
  4. 我通过uniqid()生成ID并将其放入表单中的隐藏元素来处理多个浏览器选项卡/窗口。每个选项卡/窗口的数据存储在$_SESSION[$ID]中。 Post-Redirect-Get用于摆脱恼人的表格重新提交。

    挑战在于,当用户点击浏览器中的“后退”按钮时,会生成一个新ID。这会导致$_SESSION和网络表单不同步。我计划使用粘性表单使应用程序像向导一样工作,但这需要ID在标签/窗口存在期间保持不变。

    您能否帮我了解如何区分“后退”按钮点击打开新标签?

    谢谢! PN

1 个答案:

答案 0 :(得分:0)

如果您根据用户访问它们的顺序对页面进行编号,并在每个页面的底部声明会话变量值,您可以检测它们的来源(例如按回按钮)。

page 1 = data enter page : $_SESSION['last_page'] = 1;

page 2 = data review page : $_SESSION['last_page'] = 2;

page 3 = steps exec page : $_SESSION['last_page'] = 3;

并比较他们是否来自按下后退按钮,条件如下:

#on data enter page 1 - checking if user came from data review page 2    
if($_SESSION['last_page'] > 1){
       #USER HIT BACK BUTTON - don't re-declare session id
    }