【发布时间】:2011-04-05 18:53:29
【问题描述】:
我的任务是想出一种方法来确定一个人是否通过使用他们的后退按钮(意味着他们离开我们的网站并返回)访问了我们的网站,如果是,则将他们注销。
我想出了一些选项,但我想知道我可能缺少哪些其他选项。
仅供参考,我们确实有一个会话状态,因此我们可以在服务器端长时间缺席,但他们希望在客户端进行额外检查。
选项 1:通过 onunload 设置在 x 秒后过期的烹饪。在我们网站的每个页面上,我都会检查上述 cookie。如果它存在,我假设它们来自我们网站上的另一个页面并且什么都不做。如果它不存在,我假设他们已经离开我们的网站超过 x 秒并重定向出去。缺点:运行 OS5 的黑莓设备不支持 onunload。
选项 2:与 #1 相同,但不是设置 cookie onunload,而是在每次点击转到我们网站上另一个页面的每个链接时设置它。缺点:乱七八糟
选项 3:在每次加载我们网站的每个页面时检查浏览器历史记录。如果之前的 URL 不是我们的 URL,我们将它们注销。缺点:浏览器支持? 由于安全原因,现代浏览器现在似乎阻止了上一个/下一个历史记录对象。
选项 4:通过 JS,每 x 秒检查一次 cookie。如果它在那里,请将其重置为在 x 秒后过期。如果它不在那里,假设他们已经从其他地方返回。缺点:不确定当页面可能在后台时是否会设置 JS cookie(应用在 iPhone 上切换,或在桌面浏览器中使用不同的选项卡)。
我还应该考虑其他选择吗?有没有“正确”的方法来处理这个问题?这是否只是在试图阻止正常的浏览器行为?
【问题讨论】:
-
我对这方面的一些其他探索感兴趣。我已经看到一些有趣的 Javascript 使用 cookie 和其他使用 AJAX 会话检查。
-
选项 5:放弃。说真的,选项 1 和 2 存在缺陷,原因很明显(互联网的间歇性),考虑到事实上的标准现在是选项卡式浏览,选项 3 被吹掉了,而选项 4,嗯,那就是简直太傻了。其他任何事情几乎都抓住稻草,打死马——不管委婉说法是什么,在这种敏感的情况下,它们都会带来麻烦。
-
我应该提供更多上下文。这主要用于移动设备。因此,由于网络滞后,我们不会走 AJAX 路线。不过,在移动 Safari 等方面,标签式浏览是个问题。
-
仅仅因为某人回到您的网站而将其注销似乎有点愚蠢。
-
@stingy:是的,是的。问题是企业安全人员似乎仍然没有真正了解网络和网络浏览器的实际工作原理。
标签: javascript timeout client-side