4

我们有一个场景,我们希望检测用户何时离开我们的站点并立即使他们的 .Net 会话过期。我们正在使用表单身份验证。我们不是在谈论我们已经拥有的会话超时。我们想知道用户何时通过链接、输入地址或关注书签离开了我们的网站。如果他们返回我们的网站,即使是马上,他们也必须重新登录(我知道这不是很好的可用性 - 这是我们客户提出的安全要求)。

我最初的直觉是,这要么是不可能的,要么是任何解决方案都极其不可靠。我们提出的唯一解决方案是:

  • 添加一个 JavaScript onBlur 事件处理程序,告诉服务器在用户离开站点时注销会话。
  • 用户登录后,检查 HTTP 引荐来源网址以确保用户已从站点内导航。
  • 将 AJAX 轮询添加回服务器以保持会话刷新,可能间隔为 10 秒。当未按时收到呼叫时,会话将结束。

onBlur 似乎是最简单但可能最不可靠的方法 - 我不确定它是否会起作用。推荐人方法也存在问题,因为用户可以在网站内输入地址而不点击链接。AJAX 方法似乎可以工作,但它很复杂——我什至不确定如何在后端处理它。我在想可能还有一些情况并不总是有效。

任何想法,将不胜感激。谢谢。

4

5 回答 5

2

我已经选择了像你上面描述的心跳类型的场景。Ajax 轮询或 IFRAME。当用户关闭浏览器并经过一定的超时(10 秒?)时,您可以将其注销。

另一种选择是让网站完全在 AJAX 上运行。因此,用户只能访问一个“URL”,并且所有内容都是动态加载的。当然,您以这种方式破坏了各种可用性的东西,但至少您实现了目标。

于 2009-03-18T22:42:48.557 回答
0

如果用户关闭他们的浏览器,或者输入不同的 URL(包括选择一个收藏夹),那么您就没有什么可以检测到的了。

对于您网站上的链接,您可以创建通过您的网站转发的链接(即,不是链接到http://example.com/foo,而是链接到http://mysite.com/forwarder?dest=http://example .com/foo )。

请注意只转发到您打算转发的网站,否则您可能会因“通用转发”被用于网络钓鱼等而引发安全问题。

于 2009-03-18T22:29:10.633 回答
0

您绝对肯定需要告诉客户这是不可能的。他们对 Web 的工作原理有一个基本的误解。很外交,很明显......该死,这可能是别人的工作......但它需要完成。

你的建议,或者它们的组合,可能在一个简单的概念验证中起作用……但它们只会给你带来支持噩梦,而且不会持续地起作用。更糟糕的是,毫无疑问,您还会造成用户完全无法使用应用程序的情况,因为安全黑客对他们失手了。

于 2009-03-19T04:57:43.897 回答
0

Javascript 有一个 onUnload 事件,当告诉浏览器离开页面时触发该事件。当您尝试按下后退按钮或在编辑答案时单击链接时,您可以在 StackOverflow 上看到这一点。

您可以使用此事件来触发您的站点的自动注销。

但是,我不确定这是否会处理浏览器被故意关闭或浏览器进程外部终止的情况(我猜它不会在第二种情况下发生)。

于 2009-03-19T05:33:04.297 回答
0

如果您网站内的所有导航都是通过 .NET 回发完成的(没有简单的 html 链接或 javascript open 语句),如果页面加载不是回发,您可以执行自动注销并重定向到登录页面。这不会在退出时结束会话,但它看起来像这样,因为如果手动导航到您的 Web 应用程序,它会强制登录。要为所有页面获取此功能,您可以使用在 Page_Load 中执行此操作的母版页。

private void Page_Load(object sender, System.EventArgs e)
{
    if (!IsPostBack)
    {
        System.Web.Security.FormsAuthentication.SignOut();
        System.Web.Security.FormsAuthentication.RedirectToLoginPage();
    }
}
于 2009-08-18T11:24:06.027 回答