web应用常用session处理(防session过大,内存占用过大)
来源:互联网 发布:wow3.3.5数据库 编辑:程序博客网 时间:2024/06/05 05:40
鉴于本人已入职大型公司,部分代码比较优秀,所以剽窃之,做下记录,以免浪费。
虽然在tomcat里面就可以配置session过期时间,但是比较少去这样做。如下是用代码方式,自己完成一个session管理。
代码出自实际项目:
首先,在web.xml里面配置过滤器,专门用于管理session:
<filter>
<filter-name>sessionmanager</filter-name>
<filter-class>com.xx.common.SessionTimoutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sessionmanager</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
这个过滤器拦截一切.htm结尾的url
然后就是过滤器SessionTimeOutFileter的代码:
过滤器方法doFilter代码如下:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
dofilter((HttpServletRequest) request, (HttpServletResponse) response, chain);
chain.doFilter(request, response);
}
public void dofilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
//判断是否超过规定时间没有访问
long SESSION_TIMEOUT = SysCache.SESSION_TIMEOUT;
if (SESSION_TIMEOUT >= 1L) {
HttpSession session = request.getSession();
//当前时间
long crrentTime = System.currentTimeMillis();
//上次访问时间
Object obj = session.getAttribute("lastAccesTime");
long lastAccesTime = (obj == null ? crrentTime : ((Long) obj).longValue());
if (crrentTime - lastAccesTime <= SESSION_TIMEOUT) {
if (!"1".equals(request.getParameter("nosession"))) {
// nosession 参数用在定时刷新请求上,不记录上次访问时间
session.setAttribute("lastAccesTime", crrentTime);
}
} else {
session.invalidate();
if (log.isInfoEnabled()) {
log.info(request.getServletPath() + "--" + request.getQueryString() + " session timeout [" + (crrentTime - lastAccesTime) + "] ms!");
}
//resp.sendRedirect(req.getContextPath()+"/login.jsp");
}
}
}
SysCache.SESSION_TIMEOUT是配置的一个long常量,定义session多长时间不访问则过期。
这样,就实现了sessin在规定时间内不访问,则过期并删除的代码。从而防止内存中session过大的问题。
- web应用常用session处理(防session过大,内存占用过大)
- PHPExcel占用内存过大
- php-fpm 内存占用过大
- win7--svchost占用内存过大
- linux 内存占用过大分析
- CentOS linux 中mysql5.6 占用内存过大处理
- 移花接木解决.net程序内存占用过大
- hiveserver 占用内存过大的问题
- SVN CPU内存占用过大问题
- PHPExcel解决内存占用过大问题
- [ZT]MSSQL占用内存过大的解决方法
- android webView占用内存过大解决方案
- C#中线程占用内存过大解决方法
- C++读取mysql,内存占用过大
- 解决linux服务器内存占用过大问题
- 电脑svchost netsvc占用内存过大
- SVN CPU内存占用过大问题
- Svchost.exe占用内存过大解决
- ubuntu登录输入用户名密码之后重新跳回登录界面
- 9.12测试(二)——国际象棋
- Linux 4.0的驱动开发读书笔记之驱动的概述
- Android 画笔功能
- Weblogic加Apache的群集配置
- web应用常用session处理(防session过大,内存占用过大)
- 快速幂取模算法
- 如何用jstl标签的s:iterator循环List<Object>集合
- 代码管理学习网址
- 小议:如何恢复已删除的Site Collection
- linux上ln命令详细说明
- 9.12测试(三)——网页的负载测试
- ReactiveCocoa - iOS开发的新框架
- 3.Selenium之Project创建