如何将我的应用限制在单个浏览器标签中?

Maw*_*awg 5 javascript php session

坦率地说,它只是在v1.0中引起了太多的麻烦,因为它具有需要三个表单提交的功能,$_SESSION会话数据包含所有中间内容 - 只是让用户启动操作,然后打开第二个选项卡并执行第二个操作,它会遍历会话数据.

我怀疑这是恶意的(但不能打折).用户更有可能开始操作,被打断,忘记他们已经开始或无法找到原始标签,因此再次启动(然后再找到原始标签并尝试第二次完成操作).

由于我在PHP编码,我可以检测表单提交时会话数据的存在(如果用户打开另一个选项卡,我将如何使用JS?我想我需要Ajax - 对吧?).

所以,每次我开始一个操作时,我会检查会话数据中的标志,如果设置,我会重新加载到"对不起,戴夫.我害怕我不能那样做"页面,否则我设置标志并继续(记住在操作结束时清除它).

我想这可行,但是:
1)将浏览器应用程序限制为单个标签/实例是否可以接受?
2)我应该尝试在v2.0中允许多个实例吗?

还有其他意见,帮助或建议吗?

Wyz*_*a-- 5

更好的设计是避免在会话中存储用户交互状态.将它放在隐藏的表单字段或其他内容中,以便每个客户端请求都带有与之关联的状态.如果您担心用户篡改它,请使用HMAC来防止它,并且如果它包含用户不应该看到的内容,则可能加密它.

在标签之间共享的状态(如用户的登录标识或购物车等)应存储在会话中.