2011-04-27 160 views
0

我正在开发一个使用ASP.Net 3.5 C#的网站。我在我的网站上列出了所有在线用户(在我的网站上重新登录的用户)。我想在用户注销或简单地关闭浏览器或导航到其他站点时跟踪和更新用户在数据库中的状态。在所有这些情况下,我想将用户的状态更新为“已注销”。会话超时

我该如何向前迈进。

感谢 维韦克

+0

没有“用户关闭浏览器”事件来执行服务器端代码。 – 2011-04-27 13:28:35

回答

0

当用户点击该按钮,你可以处理在服务器端的Click事件(以隐藏代码),然后登录状态变化。

public void Session_End(object sender, EventArgs e) 
{ 
    // Fires when the session ends 
} 
+0

我不同意你的答案。你确定这可以使用会话模式,如SQL Server或状态服务器吗?另一方面,我从来没有听说关闭浏览器会触发Session.End事件... – 2011-04-27 13:39:54

+0

@MatíasFidemraizer - 好点重新:Session_End事件。它不适用于所有会话模式。关于你的第二个陈述,我从来没有说过关闭浏览器会触发这个事件。 Session_End将在会话结束时触发,这将在浏览器关闭后的某个时间点发生,或者浏览器保持打开状态并且用户离开网站等。 – 2011-04-27 13:58:17

+0

我明白了:)明白了 – 2011-04-27 14:02:24

0

合法注销(即注销点击注销按钮等:

对于在浏览器关闭时,会话结束时,你可以处理在Global.asax的Session_End中的事件,这触发)可以很容易地跟踪。您只需处理事件并将其数据库状态标记为已注销。

然而,关闭浏览器是我从来没有取得过成功的一件事。您将通过网络获得许多解决方案,这将告诉您捕获关闭按钮,然后ajax请求等,但我没有成功与任何人。 (像Session_End这样的东西可能会派上用场,但是如果您使用IN-PROC会话模式以外的其他任何东西,那么这个东西并不会被解雇,所以这是不可靠的)。

0

您并不真正知道用户是否已关闭浏览器,或者如果他导航到其他网站。我认为您需要使用某种AJAX控件,它会在给定的时间间隔内向服务器发送一些消息,以确保用户正在查看您的网站。

0

首先检查我的答案在此的其他问题:

你将不能够,如果某些用户关闭浏览器立即关闭会话并跟踪这种变化,电脑关机或类似的东西。这是通过播放会话超时来实现的。

如果在某个时间间隔内触发了一些针对服务器的操作,另一种可能性就是用户在线,这将在您的服务器逻辑中实现。

退出应该很容易跟踪,因为它是“人类用户”操作。只需在身份验证管理器类或任何其他类中处理身份验证和跟踪注销的“UserLogout”事件即可。

因为技术限制:API在这方面缺乏,所以无法跟踪客户端用户的操作,如浏览到另一个页面或关闭Web浏览器。更多的是因为Web范例及其原则。你需要错过这个。