【问题标题】:how to kill the session when user closed the browser without logout当用户在没有注销的情况下关闭浏览器时如何终止会话
【发布时间】:2017-02-27 20:48:58
【问题描述】:

我正在开发一个使用 Sessions 的 aspnet 应用程序。如果用户登录到应用程序并在此处单击注销,我将关闭会话。

假设用户没有点击注销并关闭浏览器。当用户关闭浏览器而不注销时如何终止会话

【问题讨论】:

  • Rippo,我问的问题有什么问题吗?有什么错误吗?
  • 提问没有错,我向你致敬,尽管如果人们不厌其烦地回答,那么至少接受一些作为正确答案是有意义的。它也有助于其他 S.O.用户可以找到常见问题的答案,毕竟这是一个社区驱动的网站!
  • 太好了,希望你能得到一个好的答案,也许你可以重新审视你的一些老问题并在那里接受答案! :)

标签: c# asp.net


【解决方案1】:

非常艰巨的任务:

  • 使用超时时间非常短的会话/您将过期/

  • 使用隐藏脚本/iframe ping 服务器/你将有连接/

  • 在窗口中处理 onunload 事件/可以绕过/

代码示例:

window.onunload = function ()  
{    
    if((window.event.clientX<0) && (window.event.clientY<0)) {

       window.open("logoff.aspx");                  
    }    
}

【讨论】:

  • +1 我之前用过window.onunload,但还是发现了一些问题,尤其是机器人、移动设备等。最后我改变了我的业务逻辑。
【解决方案2】:

您的应用程序无法知道用户已关闭浏览器。会话将根据 Session.Timeout 关闭

如果用户在超时期限内没有刷新或请求页面,则会话结束。

【讨论】:

  • 我们可以做到。但是当用户关闭浏览器时如何限制?
【解决方案3】:

您可以在 Global.asax.cs 中定义 Session 到期时应该发生的情况。

protected void Session_End(Object sender, EventArgs e)
{
    // Do stuff here...
}

编辑:网络服务器无法知道您已关闭网络浏览器。

【讨论】:

  • 您不能保证这将始终正常工作,因为应用程序回收不会触发此事件。另请注意,Session_End 仅在 InProc(进程中)模式下触发。
猜你喜欢
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
相关资源
最近更新 更多