阻止人们返回现场?

时间:2011-04-05 18:53:30

标签: javascript timeout client-side

我的任务是想出一个方法,通过使用他们的后退按钮(意味着他们离开我们的网站并回来)确定一个人是否已经到达我们的网站,如果是这样,则将其注销。

我想出了一些选择,但我想知道我可能缺少的其他选项。

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

选项1:通过onunload设置烹饪,在x秒后到期。在我们网站的每个页面上,我都会检查所说的cookie。如果它存在,我认为它们来自我们网站上的另一个页面,什么都不做。如果它不在那里,我认为他们已经离开我们的网站超过x秒并重定向。 Con:运行OS5的Blackberry设备不支持onunload。

选项2:与#1相同,但我们不是设置cookie onunload,而是在每次链接到我们网站上另一个页面的每次点击时设置它。骗局:凌乱

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

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

我应该考虑其他任何选择吗?是否有“正确”的方法来处理这个问题?这只是抓住吸管试图阻止正常的浏览器行为吗?

2 个答案:

答案 0 :(得分:1)

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

这是我使用的方法,但它有它的缺点....例如,当用户使用后退按钮时,onload似乎并不总是有用。在某些表单字段上的OnChange等肯定有效。定时器也非常简单,但快速用户无论如何都可以通过页面获得输入。

答案 1 :(得分:0)

这并不复杂......使用javascript历史对象

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

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