访问登录页面时创建的会话过多?

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,如何管理它们? 意思是每分钟验证使用时间为零的会话,并留下使用时间超过零的会话,这里的解决方案是否也是一样的? 对不起,我没听懂你的问题。 “使用时间为零”是什么意思?

以上是关于访问登录页面时创建的会话过多?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 登录重定向您的次数过多

Spring Security - 公共页面重定向到使用无效会话 ID 登录

会话控制(session和cookie)跨页面传值

JSP中的登录页面会话超时问题

httpclient 登录成功后返回的cookie值访问下一页面

会话原理