我做了一个聊天室,我的昵称保存Session["nike"]里,同时,数据库也有昵称的列,我用了ASP.NET框架,当用户点了右上角的X,既表示退出聊天室,我想应该在Global.asax
的Session_endg事件里把昵称=Session["nike"]的那条记录删除.这样其它用户就看不到这个昵称,可是Session_endg事件没操作????请指教

解决方案 »

  1.   

    点了浏览器的X
    Session_End 也不会马上执行的
    必须等到超时
    除非是用户显式的注销,将 Session Abandon() 掉
    否则必须等到 Session 自动超时
    Session_End 里可以写代码把一个 Application 域的记录所有在线用户的公共列表刷新
    让其他用户看到该用户不在了
    但是,这还是要等到 Session 超时才能执行
    最好的办法还是让用户点注销按钮,用 Session.Abandon() 结束 Session
      

  2.   

    那就算用户走了,比如我在WEBCONFIG设了十分钟,是不是十分钟后才会执行SESSION_OND?
      

  3.   

    网站是 B/S 结构的东西
    B/S 结构的特点之一就是非持续、无状态连接
    也就是说,如果用户不点,而是直接关闭了窗口,
    服务器并不会知道。
    服务器判断用户是否在线的唯一方式就是 Session 是否在超时时间内更新。
    比如用户最后一次点击页面链接是在 1 点钟,而你 Session 超时设置的时间是 30 分钟
    那么,当用户在 1 点 15 分点了一个页面(或称作“请求过数据”),在页面上停留了 10 分钟(没点任何新链接),那么超时从 1 点 15 分就开始计时了,如果这个时候(1 点 25 分)他关闭窗口了,那么 Session_End 要在超时满 30 分钟后执行,即 1 点 45 分。我要说明的就是,你那种情况,用户走后不一定要等 10 分钟才开始 Session_End,
    因为用户可能是在最后一次发起请求 8 分钟后才关的窗口,也就是说等他走了,再过 2 分钟,Session 就超时了。不知道这样说你懂了没有?