在进行Asp.Net项目开发时,经常遇到需要判断用户是否在线的需求,我们可以根据Session的状态进行判断。当用户访问网站时,会创建一个会话(Session),浏览器在与Web服务器通信时,会附带这个会话的Id,Web服务器根据会话的Id获取当前用户的Session。如果会话(Session)过期,那么用户就无法访问需要的功能,必须重新进行登录来启动新的会话。当用户会话结束时,会触发Session_End事件,在这个事件里,我们可以处理用户下线、进行登出记录等工作。Session_End事件在Global.asax中进行定义,下面时示例代码。
protected void Session_Start(object sender, EventArgs e)
{
}
//sessionState mode="InProc" 才能触发
protected void Session_End(object sender, EventArgs e)
{
WriteLog("登出");
MemberOnlineList.DeleteOnline();
}
使用Session_End需要注意:
- 需要同时定义Session_Start
- web.config中sessionState必须定义为“InProc”
在web.config中,sessionState的定义示例如下:
<sessionState mode="InProc" cookieless="false" timeout="20" />
这里timeout定义的是session的超时时间,以分钟为单位。
需要注意的是,用户关闭浏览器等动作,不能马上触发Session_End事件,总是需要等到超时时间结束才会触发。