session超时机制
想一个问题
假设现在好多个用户登录,登录后的信息都保存到session.。程序保存的session肯定是需要消耗内存的。如果内存日积月累那么session的内存会达到一个很庞大的地步。到底有没有解决方法呢?
在一般系统登录后,都会设置一个当前session失效的时间(默认30分钟,如果30分钟没对响应的session操作则会销毁)。
修改session超时机制
-
在web容器中设置(以tomcat为例)
在tomcat-7.0\conf\web.xml中设置,以下是tomcat7.0中默认配置:1<session-config> <session-timeout>30</session-timeout> </session-config>
tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制session失效时间
这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所以如果在调试程序,应该是修改服务器端时间来测试,而不是客户端
-
在工程的web.xml中设置15
<!--时间单位为分钟--> <session-config><session-timeout>15</session-timeout></session-config>
-
通过java代码设置30
session.setMaxInactiveInterval(30*60);//以秒为单位,即在没有活动30分钟后,session将失
优先级:1<2<3
session.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${sessionScope.sessionkey }
</body>
</html>
java:
package day45.com.test.class4;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/SessionServlet")
public class SessionServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 测试session的超时时间
req.getSession().setAttribute("sessionkey", "aaa");// session作用在使用范围内,都是有效的。
// java代码修改超时时间
req.getSession().setMaxInactiveInterval(10);// 以秒为单位
req.getRequestDispatcher("class4/session.jsp").forward(req, resp);
}
}