3

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

  Page 1            Page 2            Page 3                                             
+--------+        +--------+        +--------+
|  data  |  PRG   |  data  |  PRG   | steps  |
| enter  |------->| review |------->| exec   |---+
|  page  |        |  page  |        | page   |   |
+--------+        +--------+        +--------+   | Ajax
                                        ^        |
                                        |        |
                                        +--------+
  1. 用户在第一页填写表单。
  2. 系统获取更多数据并将其显示在第二页上以另一种形式查看。
  3. 使用 Ajax 请求从第三页执行配置步骤。

我通过 uniqid() 生成 ID 并将其放入表单中的隐藏元素中来处理多个浏览器选项卡/窗口。每个选项卡/窗口的数据存储在$_SESSION[$ID]. Post-Redirect-Get 用于摆脱烦人的表单重新提交。

挑战在于,当用户在浏览器中点击“返回”按钮时,会生成一个新 ID。这会导致$_SESSION和 web 表单不同步。我打算使用粘性表单来使应用程序像向导一样工作,但这将要求 ID 在选项卡/窗口存在期间保持不变。

您能帮我找出如何区分“返回”按钮单击和打开新标签吗?

谢谢你!PN

4

1 回答 1

0

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

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
    }
于 2013-04-29T17:52:26.420 回答