想在Session_End(object sender, EventArgs e)里
处理application,想问2个问题
1、如果是直接关闭页面,是不是过了timeout设置的时间后,服务器端会执行Session_End(object sender, EventArgs e) 这个事件
2、用户名一直用 session["name"] 保存,在Session_End(object sender, EventArgs e)里面怎么得到这个session的值(为了执行相应的Application.Remove("serName";)
处理application,想问2个问题
1、如果是直接关闭页面,是不是过了timeout设置的时间后,服务器端会执行Session_End(object sender, EventArgs e) 这个事件
2、用户名一直用 session["name"] 保存,在Session_End(object sender, EventArgs e)里面怎么得到这个session的值(为了执行相应的Application.Remove("serName";)
{
// 在出现未处理的错误时运行的代码 }
你可以在这个方法中获得HttpSessionState对象,可以直接使用Session来访问即可。但是不能获得HttpContext对象,因为该事件并没有和任何请求相关联,因此不存在上下文对象。
调试一下看看吧 另外 关闭页面不行 告诉你一个方法 Session.Abandon() 可以触发Session_End 否则只能等待过期
2,定义一个string mystr=Session["name"]即可
浏览器会给每个客户端自动分配一个唯一的SessionId,用来区分多个客户端同时请求时每个响应返回给对应的客户端,这是用户察觉不到的,当关闭浏览器或者在超时无动作,则服务器会自动释放SessionId,使以前的过期不可再用
感觉可能我说的不是很清楚,楼上几位也许没有完全理解我的情况
详细举例说一下吧例子:1、有普通用户A登陆,我给一个相应的Session["name"]保存其用户名
string userName = xxxx;
并在Application[userName]里也保存一份,
正确退出时候清除这2个地方,Applicaton.remove(userName)2、这样的话,当管理员同时登陆时候,如果要删除用户A,就可以去Application里面找是否该用户登陆了,如果Application[userName]不为空就说明当前用户登陆中3、问题出来了: 当用户非正常关闭页面时候,
只能靠session的timeout时间到,然后在服务器的
void Session_End(object sender, EventArgs e) 时间里面清除Application,
可是这个时候并没有办法知道 userName的值,
如何在这里能不能获得将要释放的 session里面的 Session["name"]的值(这里面保存了用户名userName)?
2)Session_End()中是无法获得HttpContext对象的。
3)执行Session.Abandon()后,客户端必须至少有一次请求,才能正确反应Session的状态。