Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阻止人们返回现场?_Javascript_Timeout_Client Side - Fatal编程技术网

Javascript 阻止人们返回现场?

Javascript 阻止人们返回现场?,javascript,timeout,client-side,Javascript,Timeout,Client Side,我的任务是想出一种方法来确定一个人是否通过他们的后退按钮(意思是他们离开我们的网站并回来)到达了我们的网站,如果是的话,将他们注销 我已经想出了一些选择,但我想知道还有什么其他选择我可能会错过 仅供参考,我们有一个会话状态,所以服务器端我们可以长期缺席,但他们希望在客户端进行额外检查 选项1:通过onunload设置一个在x秒内过期的烹饪。在我们网站的每个页面上,我都会检查上面提到的cookie。如果它存在,我想他们来自我们网站的另一个页面,什么也不做。如果没有,我想他们已经离开我们的网站超过x

我的任务是想出一种方法来确定一个人是否通过他们的后退按钮(意思是他们离开我们的网站并回来)到达了我们的网站,如果是的话,将他们注销

我已经想出了一些选择,但我想知道还有什么其他选择我可能会错过

仅供参考,我们有一个会话状态,所以服务器端我们可以长期缺席,但他们希望在客户端进行额外检查

选项1:通过onunload设置一个在x秒内过期的烹饪。在我们网站的每个页面上,我都会检查上面提到的cookie。如果它存在,我想他们来自我们网站的另一个页面,什么也不做。如果没有,我想他们已经离开我们的网站超过x秒并重定向出去了。缺点:运行OS5的黑莓设备不支持onunload

选项2:与#1相同,但我们没有设置cookie onunload,而是将其设置在指向网站上另一页的每个链接的每次单击上。缺点:凌乱

选项3:检查我们网站每个页面每次加载的浏览器历史记录。如果前一个URL不是我们的,我们将其注销。缺点:浏览器支持?由于安全问题,现在的浏览器似乎阻止了上一个/下一个历史对象

选项4:通过JS,每x秒检查一次cookie。如果存在,请将其重置为在x秒后过期。如果不在那里,假设他们是从别的地方回来的。缺点:不确定该页面在后台时是否会设置JS cookie(应用程序在iPhone上切换,或在桌面浏览器中使用其他选项卡)


我还有其他的选择吗?有没有“适当”的方法来处理这个问题?这仅仅是为了阻止正常的浏览器行为而抓救命稻草吗

您可以将当前页面名称/操作/标识符保留在会话变量中,然后使用javascript onChange/load/keyup/keydown从服务器请求用户的当前状态。如果不匹配,请重定向或以其他方式阻止他们查看当前页面


这是我使用过的一种方法,但它也有缺点。。。。例如,当用户使用后退按钮时,onload似乎并不总是有效。某些表单字段上的OnChange等确实有效。计时器也很简单,但是快速用户可以通过页面获得输入。

没有那么复杂。。。使用javascript历史对象

history.next在“前进”按钮中为您提供页面的完整url。一个简单的正则表达式可以判断它是否来自您的域


我只是不知道是否所有浏览器都支持它

我对这方面的其他探索感兴趣。我看到一些有趣的Javascript是用cookies完成的,还有一些是用AJAX会话检查完成的。严肃地说,选项1和2有明显的缺陷(互联网的间歇性),选项3在考虑到现在的实际标准是标签浏览时被吹出了水面,选项4,好吧,这简直是愚蠢。其他的事情几乎都是抓救命稻草,打死马——不管用什么委婉的说法,在这种敏感的情况下,它们都意味着麻烦。我应该给出更多的上下文。这主要针对移动设备。因此,由于网络延迟,我们不走AJAX路线。但是,在像mobile safari这样的东西中,标签式浏览是一个问题。对我来说,仅仅因为某人要回到你的网站就注销他们似乎有点愚蠢。@stingy:是的,是的。问题是,公司安全人员似乎还没有真正理解web和web浏览器的实际工作原理。我们正试图避免点击服务器以与会话状态进行比较。所以,是的,我们试图做一些不可能的事@DA-无论如何,你已经在通过使用会话来破坏服务器了,那么再增加一次检查又有什么大不了的呢?我们在一些移动设备/网络上会遇到更少的服务器和更多的网络延迟。看起来现代浏览器正在阻止访问浏览器中的下一个/上一个历史对象,从安全角度来看,这很有意义。因此,将该选项从选项列表中划掉。