2011-04-05 56 views
2

我负责提出一种方法,通过使用后退按钮(意味着他们离开我们的网站并返回)来确定一个人是否已经到达我们的网站,如果是,则将其注销。阻止人们返回网站?

我想出了一些选择,但我想知道我可能会失去什么其他选项。仅供参考,我们确实有一个会话状态,所以在服务器端我们需要长时间缺席,但他们希望在客户端进行额外的检查。

选项1:通过onunload设置烹饪,过期时间为x秒。在我们网站的每一页上,我检查了上述cookie。如果存在,我认为他们来自我们网站上的另一个页面,什么都不做。如果它不在那里,我认为它们已经离开我们的网站超过了x秒,并且重定向了。 Con:运行OS5的Blackberry设备不支持onunload。选项2:与#1相同,但不是设置cookie onunload,而是在每次点击每个链接时都将其设置为转到我们网站上的其他页面。 con:messy

选项3: 检查我们网站每页上每个负载的浏览器历史记录。如果以前的网址不是我们的网址,我们会将其注销。缺点:浏览器支持? 由于安全性,它看起来像上一个/下一个历史对象现在在现代浏览器中被阻止。选项4:通过JS,每隔x秒检查一次cookie。如果存在,请将其重置为在x秒内过期。如果不在那里,假设他们已经从其他地方回来了。答:不知道是否在页面可能位于后台(应用程序在iPhone上切换或在桌面浏览器中使用不同的选项卡)时设置JS cookie。

我应该考虑的其他选项?有没有一种“适当”的方式来处理这个问题?这只是抓住了试图阻止浏览器正常行为的吸管?

+0

我对这方面的其他一些探索感兴趣。我已经看到一些有趣的Javascript与cookie和其他与AJAX会话检查。 – tamarintech 2011-04-05 18:55:30

+4

选项5:放弃。尽管如此,选项1和选项2有明显的缺陷(互联网的间歇性特征之一),但考虑到事实上的标准是现在选项卡式浏览,选项3会被排除在外,选项4也是如此只是简单的愚蠢。除此之外,还有什么其他的东西可以抓住吸管,击败一匹死马 - 无论委婉说法如何,它们在这种棘手的情况下都会带来麻烦。 – 2011-04-05 18:58:30

+0

我应该给更多的上下文。这主要是针对移动设备的。因此,由于网络滞后,我们不会采用AJAX路线。不过,标签式浏览是一个问题,就像移动Safari一样。 – 2011-04-05 19:01:13

回答

1

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

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

+0

我们试图避免碰到服务器来与会话状态进行比较。所以,是的,我们有点想做不可能的事情。 ;) – 2011-04-05 19:02:01

+0

@DA - 你已经使用会话来调整服务器了,所以增加一个检查有什么大不了的? – StingyJack 2011-04-05 19:03:51

+0

服务器越少,我们在某些移动设备/网络上的网络延迟就越多。 – 2011-04-05 19:04:54

0

这不是那么复杂......使用JavaScript历史对象

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

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

+0

看起来像现代浏览器阻止访问浏览器中的下一个/上一个历史记录对象,这从安全POV是非常有意义的。所以,把它从选项列表中删除。 – 2011-04-05 20:24:20