我正在编写一个应用程序来驱动多个路由器中的配置命令的执行。 以下是它的设计方法:
Page 1 Page 2 Page 3
+--------+ +--------+ +--------+
| data | PRG | data | PRG | steps |
| enter |------->| review |------->| exec |---+
| page | | page | | page | |
+--------+ +--------+ +--------+ | Ajax
^ |
| |
+--------+
我通过uniqid()生成ID并将其放入表单中的隐藏元素来处理多个浏览器选项卡/窗口。每个选项卡/窗口的数据存储在$_SESSION[$ID]
中。 Post-Redirect-Get用于摆脱恼人的表格重新提交。
挑战在于,当用户点击浏览器中的“后退”按钮时,会生成一个新ID。这会导致$_SESSION
和网络表单不同步。我计划使用粘性表单使应用程序像向导一样工作,但这需要ID在标签/窗口存在期间保持不变。
您能否帮我了解如何区分“后退”按钮点击打开新标签?
谢谢! PN
答案 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
}