【问题标题】:how to end session or logout a user on browser close MVC ASP .NET如何在浏览器关闭 MVC ASP .NET 上结束会话或注销用户
【发布时间】:2013-11-17 06:25:56
【问题描述】:

我设计了一个 MVC 表单,想在用户关闭浏览器时结束会话,如果重新打开浏览器,则必须重新登录!

我不知道我是否必须结束会话或清除 cookie,如果是,我应该怎么做。你能帮我找到我的答案吗...

谢谢!

【问题讨论】:

  • 没有万无一失的方法来确定是否有人关闭了浏览器。此外,登录是通过 cookie 而不是会话状态处理的。这是一个类似主题的示例线程 - stackoverflow.com/questions/1783302/…
  • @Tommy 谢谢你的回答,我应该如何以及在哪里清除 cookie?

标签: asp.net-mvc asp.net-mvc-4 session-cookies session-timeout


【解决方案1】:

你可以使用:

function del_cookie(name) {
    document.cookie = name + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
}
<body onload="SetCookie()" onunload="del_cookie()">

来源here

尝试自己修改

【讨论】:

  • 非常感谢,但这不是网络表单,我使用的是 MVC!我应该将正文 onload 放在 MVC 的哪个位置?
  • 抱歉回复你晚了。有javascript,你可以在你的网页中放入aspx。 &lt;html&gt; &lt;script&gt; function del_cookie(name) { document.cookie = name + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;'; } &lt;/script&gt; &lt;body onload="SetCookie()" onunload="del_cookie()"&gt; //your content// &lt;/body&gt; &lt;/html&gt;
  • 这是一个非常酷的解决方案,但也适用于标签关闭。因此,如果您正在处理多个选项卡,它将终止所有选项卡的会话。
  • 链接已损坏。在 WaybackMachine 上找到它,这里:web.archive.org/web/20130424221916/http://javascript.about.com/…
【解决方案2】:

如果您使用 In-Proc 会话模式,在这种情况下,您可以在 global.asax 文件中获取会话超时事件。因此,如果您正在创建 Cookie 和其他用户特定的存根,您可以使用此事件清除这些东西。

在 Global.asax.cs 中

    protected void Session_End(object sender, EventArgs e)
{
   //Clean-up Code
}

如果是 Out-Proc 模式,您将永远不会收到会话超时事件。

正如汤米所说,没有万无一失的方法来确定是否有人关闭了浏览器,但是你可以通过 Jquery 来做到这一点。您需要以特定的时间间隔 ping 您的服务器。因此,当您在特定时间后停止从客户端获取任何内容时,您可以执行清理操作(与会话超时相同)

【讨论】:

    【解决方案3】:

    你可以试试。 在浏览器关闭或页面加载事件中,从 javascript 中删除 cookie 或 在浏览器关闭事件(或页面卸载事件)上调用服务器并清除服务器上的会话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-10
      • 2020-12-27
      • 2012-06-16
      • 2013-04-22
      • 2017-01-17
      • 1970-01-01
      • 2017-12-28
      • 2011-05-23
      相关资源
      最近更新 更多