Zend - 检查浏览器的后退按钮是否被按下

问题描述:

这是场景:我填写一个表格,然后在我的数据库中插入一些东西。之后,我自动重定向到另一个表单。如果用户按下浏览器的后退按钮,因此第二个表单未被填充和提交,我想从数据库中删除他之前插入的内容。Zend - 检查浏览器的后退按钮是否被按下

我怎么能知道,当用户按下浏览器的后退按钮?

+2

如果用户关闭浏览器会怎么样?因此,尝试将数据temp保存在会话中,并在表单填满后将其保存在数据库中! – Rikesh 2012-04-12 11:54:19

+0

是的,会议是要走的路。 – mpm 2012-04-12 12:01:55

我放弃了插入,然后删除的想法。我已经选择在两个表单填充后插入数据。谢谢Rikesh Shah的想法!并感谢大家的答复!

你是什么意思?你想检测在JavaScript或后端代码(zend)?

你可以令牌(唯一ID)添加到窗体,并确保在页面缓存一段时间,所以当用户单击后退按钮的页面不会被重新从服务器获得由此产生了新的令牌。

编辑:多步骤向导可以通过多种方式完成,无需通过身份验证的用户就可以跟踪令牌,也可以根据您提交的数据进行检查,无论是否已重新提交。

+0

我想在Zend那样做。我将尝试仅在填写两个表单时插入数据。这似乎是一个好主意。 – 2012-04-12 12:00:30

我不知道你是否能抓住这个事件(外观与history.back())

但我认为更好的办法,使这是把一个国家在你的DB(与用户ID或类似的东西)&当状态保持“当前”时删除它

首先 - 在Zend中没有办法做到这一点,因为它是客户端操作,而不是服务器端。您可以尝试找到在第二页上使用javascript的window.onunload事件(也是implemented in jQuery)的方法,但这并不是最安全的选项,因为它可能无法在某些浏览器中触发,或者用户可能会关闭其javascript。

你可以保存在会话中的第一种形式的最后插入的ID,并检查它的存在,当你下一次加载页面。例如,当用户提交第一个表单时,你说表单A已经被提交并且一个记录已经用这个ID保存了。然后,如果用户提交下一个表单,则清除标志(意味着所有事情都按计划进行)。但是,如果用户按下后退按钮并返回上一页,则检查标志是否已设置。如果是这样,你从表中删除记录(因为用户没有提交第一个表单就按下了)。

这种解决方案的问题是,浏览器将最有可能加载页面的缓存版本和你的PHP代码甚至没有得到执行。因此,您需要在提交第一个表单时检查状态。但是,这会产生另一个问题 - 如果用户提交第一个表单,返回并关闭窗口会怎么样?它永远不会运行检查,并且永远不会删除该行。

在我看来,最可行的办法是修剪第一种形式的记录是不是,比方说,一个小时老年人和使用cron作业尚未完成。

有没有简单的解决办法,所以我会说有一个页面上这两种形式的所有领域。这会让你的生活更轻松。