一个session是不是
当浏览器关闭时就会在服务器端被删除??但前几天做练习时碰到:
我的一个后台页面需要用户名和密码登入,
登入成功后 session.setAttrubute("admin", "true");
然后我把浏览器的窗口关闭,
再session.getAttrubute("admin");
取出来却还是 true
.......
然后我在网上找到这样的说法: 
session的开始时刻比较容易判断,它从浏览器发出第一个HTTP请求即可认为会话开始。但结束时刻就不好判断了,因为浏览器关闭时并不会通知服务器,所以只能通过如下这种方法判断:如果一定的时间内客户端没有反应,则认为会话结束。是这样的吗?
浏览器关闭时,服务器不会把与其对应的session删除吗? 

解决方案 »

  1.   

    关闭浏览器不一定会删除对应的session,只有手动来删除session,服务器调用删除session后才会结束,否则只有等session超时了才会删除,所以很多检测用户在线的程序都是使用一个定时器,定时检查用户时候有新的活动,如果没有新的请求则视为离线,删除其session!
      

  2.   

    是的, 关闭时不一定就及时的删除了session对象,session对象有个默认值,是三十分钟,
    如果三十分钟之后用户没有回话,就会自动删除此对象。 。
      

  3.   

    session.setMaxInactiveInterval(int interval) 
    设置有效时间
      

  4.   

    我说一点我的拙见,SESSION 只是一个服务器内存里的一个MAP里的普通对象,由WEB容器管理,如果没有主动清除,它他在超过访问最大间隔,就被从MAP中删掉等待GC回收一个浏览器只所以能持续的访问一个SESSION,是因为他在临时COOKIE里存有访问该SESSION的钥匙——SESSION ID。如果浏览器关闭,临时的COOKIE也就被清除了,同样,再打开浏览器器时就不会再使用那个COOKIE里保存的SESSION ID。所以服务器会另建一个SESSION供新打开的浏览器器使用。而在浏览器器关闭的时候,服务器并不知道,所以也不会去清掉这个SESSION ,这个SESSION会等最大时间间隔到了由系统自动清理。
      

  5.   

    而且你记下上次访问的SESSIONID象
    B589DD7F9D9F7FF56EBEBF9E2614A239
    这样的一个长串,在打开一个新浏览器时想用刚才的SESSION 可以这样
    访问一个页面,将SESSIONID作为参数传递过去就OK了
    如http://localhost:8080/testWeb/index.jsp?JSESSIONID=B589DD7F9D9F7FF56EBEBF9E2614A239
    这样你访问的页面就可以访问刚才请求的SESSION了而且这证明在浏览器关闭时与SESSION的清除没有直接关系