服务器端的session会总是占着内存吗?

shuaiwang_01 2012-01-03 04:35:19
我在做Java web开发,用的struts1.2和hibernate,在程序中由于有些参数不好传递,我干脆设置为session保存,比如

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

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

request.getSession().removeAttribute();

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

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

1.如果会的话,怎么彻底去除之,以收回它所占用的内存
2.如果不会的话,我怎么验证它会自动消失?
...全文
430 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
applerockhool 2012-01-04
  • 打赏
  • 举报
回复
session的id是存在cookie里的,服务器保存一个大Map,通过session id直接索引。
加入你设置了session失效时间,那是cookie中session id的失效时间,所以就算用户session失效了,但是服务器Map还是占用内存,具体如何清空要看web容器了吧
fireelf000 2012-01-04
  • 打赏
  • 举报
回复
session已经失效了你去调用request.getSession().getAttribute("userIdSession") == null来判断当然会报空指针
Honly_java 2012-01-04
  • 打赏
  • 举报
回复
10楼正解
xujingjohn 2012-01-04
  • 打赏
  • 举报
回复
一般通过中件SESSIONTIMEOUT参数可配置
shuaiwang_01 2012-01-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 awl910213 的回复:]

1.session时间可以设置
HTML code

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


2.浏览器关闭session会消失
application跨浏览器,可以用来加载一些你需要的数据
[/Quote]

你好,请问一下,我写了个filter来判断session失效时跳转到login.jsp

package filterPackage;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SecurityFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub

}

public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;

if (request.getSession().getAttribute("userIdSession") == null) {
response.sendRedirect(request.getContextPath() + "/login.jsp");

}
chain.doFilter(request, response);
}

public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}
}


然后在web.xml这样配置

<filter>
<filter-name>securityFilter</filter-name>
<filter-class>filterPackage.SecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>securityFilter</filter-name>
<url-pattern>/page/*</url-pattern> <!--page是一个包含几个jsp页面的文件夹-->
</filter-mapping>

我的session-timeout配置的是一分钟。
在一分钟之后,所有的session都已失效,进行任何操作时应该都调到login.jsp,
但是出现了异常情况。
1.searchItemListSession这是已经失效,在进行一个操作时(当然这个操作要用到searchItemListSession),直接报nullpointerexception错误。
2.其他一些操作则直接显示一个白色空页面。

请问该如何拦截session失效之后的一些操作,让其跳到login.jsp?
xinleicn 2012-01-03
  • 打赏
  • 举报
回复
有时间控制着呢。
孤独人生 2012-01-03
  • 打赏
  • 举报
回复
浏览器关闭,session自然就会消失的,因为session的有效期为一次对话
nintyfive 2012-01-03
  • 打赏
  • 举报
回复
3楼,4楼正解
艾小仙 2012-01-03
  • 打赏
  • 举报
回复
1.session时间可以设置

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

2.浏览器关闭session会消失
application跨浏览器,可以用来加载一些你需要的数据
y2009270076 2012-01-03
  • 打赏
  • 举报
回复
浏览器关闭的话,这个客户端的session就消失了
ycj370833904 2012-01-03
  • 打赏
  • 举报
回复
你不清空就有啊 ……
24K純帥 2012-01-03
  • 打赏
  • 举报
回复
session是有时间的,也是可以清空的

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧