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

我正在聊天应用程序工作,我用HashTable包含用户和运算符作为ChatRoom类的键和对象作为HashTable的值。 主要问题是,当用户或操作员closures浏览器或断开没有注销,然后它会自动注销会话结束。

请帮助我相关的,以及如何在这个问题上使用Global.asax。

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

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

但要小心,当用户closures浏览器或连接丢失时,会话不会结束。 会话超时到达时结束。

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

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

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

我build议你在用户对象中保留最后一个请求的时间。 这样,您可以确定用户的活跃程度,以及用户离开聊天的可能性。 例如,您可以将任何两分钟内没有做任何事情的用户显示为非活动状态。

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

您可以使用浏览器中的onunload事件在用户离开页面时向服务器发送注销请求。 这当然只在用户仍然具有networking连接的情况下才起作用。 当你重新加载页面时,onunload事件也会被触发,所以你将不得不跟踪触发事件的原因。

你可以运行在客户端上的JavaScript,并发送一个信号给服务器,如“我在这里”。 如果下一个信号不来,你可以给Leave(); 。 我用AJAX来做到这一点。