各位批我的论点的时候先搞清楚在说什么好不好。
我什么时候说过session是完全存在硬盘上的,偶只是说服务器有自己的策略会将相当部分的不是用户关闭浏览器就超时的session在硬盘上保存。

偶走了,各位继续讨论吧。不过先搞明白你们要说什么,要批驳什么。不要说到最后大家说的是同一个问题。

我开始只是针对服务器维持的session说的
不过sinio_feng提醒了我,确实可以自己将本来应该存到session中的数据存到硬盘中,如果session中的数据量比较大且session比较多的化,但是我认为一定要在内存中有一个缓存,可以按LRU来实现

话题跑远就跑远,互相学习麻,大家并不是完全为了楼主的那个问题才进来的

会将相当部分的不是用户关闭浏览器就超时的se
> sion在硬盘上保存。

别急,cool down,

我说的可能不对,我觉得超时的session就失效了,进回收站了。保存的意义何在?毕竟session是时间敏感的,不象存储在数据库中的数据那样持久。

raynix,出于节约内存的目的,在访问量大的系统中session占用的内存是很多的,把一些东西放到硬盘上也有道理,下次从硬盘取总比丛数据库取快
不过我认为这应该是特定应用的逻辑(当然也可以做的通用一点),而不是服务器应该管的。
代价是需要自己写一些程序

这里不是每个人都在批判你的观点,也有很多人赞成你的观点,你用不着恼羞成怒。你认为你是对的,你可以举出具体的例子来证明你的观点,你也可以完全不理会,但是用不着一副不耐烦的盛气凌人的架势,根本没人吃这一套,只会让人反感。

我真的很后悔我干吗要进这个thread。

sinio_feng,你当然可以不用序列化的方式来把对象保存到硬盘上,而是选择自己来实现,但你想深一层,就会明白,那其实不过是你自己写程序来实现Java早已提供给你的序列化功能而已,Java保存在硬盘上对象,简单的对象属性保存也没有了不起,复杂一点的,比如对象属性,你无法确定保存在硬盘上的字节长度,读取的时候很棘手,C/C++可以用sizeof确定长度,Java没有现成的办法,尤其是自递归对象,更加无法确定。呵呵,自己写代码实现还不如用现成的,既然如此何必多此一举?


>>HttpSession没有实现序列化接口,但只要服务器特定的子类能实现,就可以序列化到硬盘上
AreYouOK,你有点误会我的意思,其实我想说的不是HttpSession需要实现序列化接口,而是HttpSession中setAttribute的对象应该实现序列化,所以就算服务器特定的子类能实现,如果你程序里面set到Session里面的对象不是序列化的,一样白费。

robbin,这个问题就这样吧。这是技术的一个争论而已,不要掺绞进来感情的因素。
偶对session的理解事它是为了解决http协议的无状态性引入的一种补充技术和协议。session的具体实现可能和各个服务器是相关的,但它的机制是大体一样,和语言无关的,所以,你说一个session不可钝化所以不可能是存在磁盘上的,觉得这是从理论上根本说不同的,毕竟session这种东西在各种服务器及web技术中都存在的,但不是每种语言都是面向对象的。

robbin,其实心很细,对技术细节也是研究很透的。呵呵,那两个BT的问题,robbin至少还有个解释。谢了先。

大家交流一下而已,不要把问题撤到感情的辩论和人身的攻击就是了。

如果设置超时为-1,不会消失,但在应用服务器重启后将被清除。

这是很基础的b/s的知识?开贴讨论,有这个必要,很多问题我们可以自己查资料解决,没必要这么浪费时间。说的可能比较难听,见谅,不过确实心里是这么想的

我把你们的讨论看完了,觉得大家各自有自已的理解,不错,但给人的感觉是好象没有一种比较权威的,有说服力的观点呈现,不过robbin的看法比较深刻,但还是没有完全解开大家的困惑,我觉session在服务器关闭时,若没有过期,其应刻会被服务器或讲容器序列化到硬盘中
你请求一个页面生成一个session,并存入一个String对象实例,取到一个sessionID,然后关闭服务器,再重起,
然后输入上次得到的sessionID,并读取其中原先存入的对象实例,会发现是可以取到的,
useImage.jsp;jsessionid=3727E65B24F9060B53670EBE74074502
我看到这里的讨论,就注册一个进来了,不好意思,我也说了一点,

收益匪浅

AreYouOK 仁兄讲话依据事实,毫不张扬。作技术的就应该踏实,朴素,我们不是政客,也不是墨客,讨论技术是只是为了共同的兴趣!


AreYouOK? 的说法是对的,而且比较全面也比较详细,

我比较赞同AreYouOK? 的观点。而且说的很全面详细。