日期:2014-05-17  浏览次数:20744 次

服务器端的session会总是占着内存吗?
我在做Java web开发,用的struts1.2和hibernate,在程序中由于有些参数不好传递,我干脆设置为session保存,比如
Java code

request.getSession().setAttribute("searchItemListSession", form.getSearchItemList());


然后再在别的地方取出这个list。
可以用
Java code

request.getSession().removeAttribute();


来删除searchItemListSession,但是这个session值可能在很多场合中要用到,因而不适合删除,也不知道在哪删除。

我想问的是,如果用户已经关闭了浏览器,这个searchItemListSession会一直呆在服务器中吗?

1.如果会的话,怎么彻底去除之,以收回它所占用的内存
2.如果不会的话,我怎么验证它会自动消失?

------解决方案--------------------
session是有时间的,也是可以清空的
------解决方案--------------------
你不清空就有啊 ……
------解决方案--------------------
浏览器关闭的话,这个客户端的session就消失了
------解决方案--------------------
1.session时间可以设置
HTML code

<session-config>
        <session-timeout>30</session-timeout>
</session-config>

------解决方案--------------------
3楼,4楼正解
------解决方案--------------------
浏览器关闭,session自然就会消失的,因为session的有效期为一次对话
------解决方案--------------------
有时间控制着呢。
------解决方案--------------------
session已经失效了你去调用request.getSession().getAttribute("userIdSession") == null来判断当然会报空指针
------解决方案--------------------
session的id是存在cookie里的,服务器保存一个大Map,通过session id直接索引。
加入你设置了session失效时间,那是cookie中session id的失效时间,所以就算用户session失效了,但是服务器Map还是占用内存,具体如何清空要看web容器了吧
------解决方案--------------------
一般通过中件SESSIONTIMEOUT参数可配置