首先说明:web上用的都是非连接的网络协议
session 是存在服务器上的
每个session有一个唯一的session ID(为了标识他是那个客户端的)在启动session的同时,会在客户端生成cookie,服务器把session ID加到cookie中
每次服务器和客户端交互的时候,就是从cookie中取得session ID 来定位服务器上的session这样只要你的cookie不过期,服务器上有你的session,就不会出问题

解决方案 »

  1.   

    我认为session  与  cookie 并存在关系,我上边的问题说错了
    因该是是这样的;当把tomcat启动后,进行登陆完成,然后停止web服务,在启动服务,然后刷新刚才没有关闭的页面,也不用登陆即可显示还有我怎么控制客户端,在没有点即我的logout按钮,直接关闭浏览器(session时间没有过期)的情况下,能自动把session 清除掉
      

  2.   

    根据我的理解,出现的情况应该跟你的情况正好相反
    1、两台服务器的情况,在一台服务器上登录,然后访问另一台服务器,肯定是不能共享Session的。
    2、登录,然后重启Tomcat,session应该失效
    另外,直接关闭浏览器,我觉得是没有办法清除session的session的原理,sunrain_gao(太阳雨) 说得有一定道理,但好像跟我的理解也有点不一样。我是这样理解的,请指正:
    1、cookie是针对某一个网站的,从A服务器获得的cookie,访问B服务器的时侯,浏览器不会把该session发送给B服务器
    2、服务器上,根据sessionID,会维护一个session列表。而B服务器上是没有这个列表的。(如果服务器进行了群集是可以在多台服务器上共享session的,但Tomcat好像不能群集,而且看你的做法也没有对A\B两台做群集)
      

  3.   

    谢谢大家给我的回答!不知道大家试过没有?
    启动Tomcat,利用session登陆,然后在不关闭浏览器的情况下,stop tomcat
    然后在启动tomcat,到刚才没有关闭的浏览器下做刷新,不用登陆即可使用,还有在tomcat 的web.xml里有关于sessiontimeout的设置,默认的是30分钟,这个时间与我在servlet中登陆设置的sessiontiomeout有什么关系,依那个为标准??
      

  4.   

    启动Tomcat,利用session登陆,然后在不关闭浏览器的情况下,stop tomcat
    然后在启动tomcat,到刚才没有关闭的浏览器下做刷新,不用登陆即可使用,这是不可能的,或者都是你的程序做的有问题,或者你看到的是浏览览器的缓存~你换个别的页面试试,
    第二个问题不清楚,我想应该是你设的为准~
      

  5.   

    别说你重起tomcat就是你将所在也进行修改和重编译也会造成session丢失的
      

  6.   

    kingljx(灵剑仙) 可以试一下,的确是这样,如果你用jbuilder,不要在jbuilder里试
    在配置好的tomcat里试一下
      

  7.   

    还有在tomcat里把web.xml里的sessiontimeout设为0,会有什么结果或者说后果!
      

  8.   

    To zz8zz(喧海):我没用过TomCat
    我用的Weblogic,而且之前我还用过ASP
    至少在我用的这些东东里面session的性质与上面楼上各位说的都差不多另外,说到直接关闭浏览器的问题,确实没有办法清除session,但是,需要注意的是:session这种东东是面向会话的关闭浏览器之后,会话就会关闭了,之后某个时刻session因为已经找不到原来的会话信息应该就回收了另外,我想问几点问题:
    1、你的浏览器使用的Windows自带的,还是那些已经外加了外壳的?比如MyIE?
    2、你说关闭TomCat在重新启动之后,不用登陆就可使用。请问:你登陆之后的页面是否进行了权限认证?比如时候在登陆之后的页面中依然对session内部的值进行监视、判断?
      

  9.   

    客户端如果没有关闭cookie选项的话,那么session值是放在客户端的客户端如果关闭了cookie的话,那么session值是放在服务器端的。你可以简单的测试一下,在客户端关掉cookie,看是否还会有你上述的情况
      

  10.   

    我不同意nc201(Bricklayer)的观点,session总是放在服务器上的,每个客户会跟一个sessionID对应。因为HTTP是无连接的,如何区分同一个客户的多次请求呢,就需要客户端每次发请求的时候,发送相应的sessionID。
    通常情况下,sessionID在客户端以cookie的形式保存。如果浏览器静止了cookie,客户端再向服务器发请求的时候,就不会发送sessionID,因此服务器就会将这个请求作为一个新客户,所以就会出现session值丢失的假象。
    这时候出现一个问题,如果客户浏览器不支持cookie,怎么办?J2EE提供的另一个办法就是URL重写,写超链接的时侯,总是用response.encodeURL(url),连接就会变成*.jsp?sessionID=......,完成了原来用cookie完成的功能。
    J2EE建议,不论客户浏览器是否支持cookie,服务器端编程都建议使用URL重写。
      

  11.   

    至于Tomcat的情况,我也试了一下,好像确实是这样的。
    我觉得原因可能是:
    1、Tomcat故意如此,服务停止之后,将当前的所有活动状态保存,然后在重新启动的时侯重新装载。
    2、Tomcat服务停止,事实上并没有真正停止,一些状态也并没有真正删除。需要有人对Tomcat的实现非常熟悉才行。或者哪位高人看看Tomcat的源码,找找原因。可以重启服务器试一下。
      

  12.   

    to  danceflash(Wine)1.我用的浏览器是IE
    2.我在每一页都对SEssion做了确认,
    我现在把tomcat 里的  web.xml 文件中的sessiontimeout改为零,好像可以控制,用户在关闭浏览器的情况下,不会出现问题
      

  13.   

    曾经用Robot测试过聊天室性能,为了能够模拟多用户同时访问,研究过这个问题。
    正如我所说。
      

  14.   

    这个根本不是什么session问题,是因为你客户端有缓存,当提交同样的请求时,ie根本就没向服务器发送请求,而是直接读缓存的内容。
    你把ie设置为每次请求都检查更新试试看,应该就没这问题。
      

  15.   

    同意 transist(风动石) ,IE的缓存就是这样,你不要用前进、后退来看,调试程序一定要刷新页面。另外,session肯定是存在服务器端的不信你们可以去看看resin的conf文件里面可以设置<session-max>4096</session-max>
      

  16.   

    tomcat的session保存方式是什么?文件?内存?