想在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";)

解决方案 »

  1.   

    问一下,如果某个用户关闭了页面,是不是过了timeout的时候后,服务器这里会自动Session_End(object sender, EventArgs e)这里执行我写的代码呢? 用HttpContext.Current.Session["name"]是不是能正确地得到timeout的这个用户的session["name"],而不是别的用户的Session["name"]或者服务器本地的Session["name"]? 
      

  2.   

    HttpContext.Current.Session["name"] != null 我这边会引起错误,自动跳到void Application_Error(object sender, EventArgs e) 
        { 
            // 在出现未处理的错误时运行的代码    }
      

  3.   

    先前说错了 
    你可以在这个方法中获得HttpSessionState对象,可以直接使用Session来访问即可。但是不能获得HttpContext对象,因为该事件并没有和任何请求相关联,因此不存在上下文对象。
    调试一下看看吧  另外 关闭页面不行  告诉你一个方法 Session.Abandon() 可以触发Session_End  否则只能等待过期
      

  4.   

    1,关闭页面就会执行Session_End(object sender, EventArgs e)释放Session
    2,定义一个string mystr=Session["name"]即可
    浏览器会给每个客户端自动分配一个唯一的SessionId,用来区分多个客户端同时请求时每个响应返回给对应的客户端,这是用户察觉不到的,当关闭浏览器或者在超时无动作,则服务器会自动释放SessionId,使以前的过期不可再用
      

  5.   

    session["name"]把名字搞出来 去application里去找 找到就移
      

  6.   

    直接使用string mystr=Session["name"],自己尝试了一下似乎是不行的
    感觉可能我说的不是很清楚,楼上几位也许没有完全理解我的情况
    详细举例说一下吧例子: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)?
      

  7.   

    1)要激发Session_End(),必须正确配置Web.config,如<sessionState timeout="1" mode="InProc" />
    2)Session_End()中是无法获得HttpContext对象的。
    3)执行Session.Abandon()后,客户端必须至少有一次请求,才能正确反应Session的状态。