访问登录页面时创建的会话过多?
Posted
技术标签:
【中文标题】访问登录页面时创建的会话过多?【英文标题】:Too many sessions are created when accessing the login page? 【发布时间】:2011-05-15 01:45:45 【问题描述】:我正在使用 spring 框架、apache、tomcat 登录页面由spring security处理 我有一个问题 每次对登录页面的请求都会为用户生成一个新会话,我知道这是默认行为,当您访问登录页面时,会为您创建一个新会话,那么如果登录时产生大量负载怎么办页面,太多的用户只是查看登录页面而没有做任何事情,所以这里创建了太多未使用的会话。 你们怎么看只是一个问题,我知道这很少见,但可能会发生,如何处理?
【问题讨论】:
【参考方案1】:我认为这并不罕见。一种可能的解决方案是将会话超时设置为最小。例如 5 分钟。此外,如果用户的会话已经存在,您可以编写一个过滤器来增加会话超时。所以普通用户的会话超时时间为 30 分钟,而只访问一侧的用户超时时间为 5 分钟。
这里有一个过滤器可以解决问题:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException
HttpServletRequest httpRequest = (HttpServletRequest)request;
// The false is important, otherwise a new session will be created.
HttpSession session = httpRequest.getSession(false);
if (session == null)
chain.doFilter(request, response);
return;
session.setMaxInactiveInterval(30 * 60);
chain.doFilter(request, response);
另一个好的建议是过滤像 google bot 这样的爬虫。 “机器人检测”是一个很好的关键字。
【讨论】:
如果一个登录用户已经有一个会话,并且他空闲了5分钟,那么他的会话也会被破坏? 是的,如果用户只提出一个请求。任何进一步的请求都会将超时时间延长到 30*60 秒。 太好了,我有另一个问题,在我的另一个应用程序中,有很多会话使用时间为 0,如何管理它们? 意思是每分钟验证使用时间为零的会话,并留下使用时间超过零的会话,这里的解决方案是否也是一样的? 对不起,我没听懂你的问题。 “使用时间为零”是什么意思?以上是关于访问登录页面时创建的会话过多?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security - 公共页面重定向到使用无效会话 ID 登录