当前位置:  开发笔记 > 编程语言 > 正文

如何在global.asax中处理会话结束?

如何解决《如何在global.asax中处理会话结束?》经验,为你挑选了3个好方法。

我正在聊天应用程序中,我使用HashTable将User和Operator作为ChatRoom类的键和对象包含为HashTable的值.主要问题是当用户或操作员关闭浏览器或断开而没有注销时,它会在会话结束时自动注销.

请帮助我解决这个问题,以及如何在这个问题上使用Global.asax.



1> Canavar..:

您可以使用global.asax的会话结束事件来删除意外断开连接的用户:

void Session_End(Object sender, EventArgs E) {
    // Clean up session resources
}

但请注意,当用户关闭浏览器或连接丢失时,会话不会结束.它在达到会话超时时结束.


@ ashishbhatt的评论对我来说是对的.您可以大量降低会话超时(即1分钟),但**必须确保**至少一个无操作的AJAX调用作为心跳(或保持活动)连续执行.这只是一个技巧,不应该扩展到数百万用户

2> MartinHN..:

将Global.asax文件添加到您的网站,并在Session_End事件中,从HashTable中删除该用户.

protected void Session_End(Object sender, EventArgs e)
{
    // Remove user from HashTable
}


我不明白你的问题.抱歉.

3> Guffa..:

当浏览器关闭时,Session_End事件不会触发,当服务器在特定时间内没有收到用户的请求时(默认为20分钟),它会触发).这意味着如果您使用Session_End删除用户,他们将在关闭浏览器后保持聊天20分钟.

我建议你在用户对象中保留最后一个请求的时间.这样,您就可以确定用户的活跃程度,以及用户离开聊天的可能性.例如,您可以将任何未执行任何操作的用户显示为非活动状态.

您还可以让聊天应用程序定期轮询服务器(如果您不这样做).这将更新对象中的最后一个请求时间,并且只要聊天窗口打开,就可以使用户保持活动状态.

您可以使用浏览器中的onunload事件在用户离开页面时向服务器发送注销请求.这当然仅在用户仍具有网络连接时才有效.重新加载页面时也会触发onunload事件,因此您必须跟踪触发事件的原因以便使用它.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有