2010-11-24 8 views
3

Ich benutze Spring Framework, Apache, Tomcat und die Login-Seite wird mit Feder Sicherheit behandelt und ich habe ein Problem , dass jedes Mal, wenn die Anfrage auf der Anmeldeseite eine neue Sitzung für den Benutzer generiert, ich weiß, es ist die Standardverhalten Wenn Sie auf die Anmeldeseite zugreifen, wird eine neue Sitzung für Sie erstellt. Wenn eine große Belastung auf der Anmeldeseite auftritt, sehen zu viele Benutzer nur die Anmeldeseite, ohne etwas zu tun, also zu viele nicht verwendete Sitzungen sind hier erstellt. Was denkst du über ein Problem, ich weiß, es ist selten, aber es kann vorkommen, wie man damit umgeht?Beim Zugriff auf die Anmeldeseite werden zu viele Sitzungen erstellt?

Antwort

2

Ich denke nicht, dass das selten ist. Eine mögliche Lösung könnte darin bestehen, das Sitzungszeitlimit auf ein Minimum zu setzen. Zum Beispiel 5 Minuten. Außerdem können Sie einen Filter schreiben, um das Sitzungszeitlimit zu erhöhen, wenn für den Benutzer bereits eine Sitzung existiert. So hat der normale Benutzer eine Sitzungszeitüberschreitung von 30 Minuten und Benutzer, die nur eine Seite besuchen, haben eine Zeitüberschreitung von 5 Minuten.

Hier ist ein Filter, der den Trick Dosis:

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); 
} 

Ein weiterer guter Rat ist, Crawlern wie der Google-Bot zu filtern. "Bot Detection" ist ein gutes Keyword, nach dem Sie suchen sollten.

+0

Was ist, wenn ein eingeloggter Benutzer bereits eine Sitzung hat und er sich 5 Minuten im Leerlauf befindet, so dass seine Sitzung ebenfalls zerstört wird? –

+0

Ja, wenn der Benutzer nur eine Anfrage stellt. Jede weitere Anfrage verlängert das Timeout auf 30 * 60 Sekunden. – scheffield

+0

groß, ich habe ein anderes Problem, in einer anderen App, die ich hatte, gibt es viele Sitzungen mit der Zeit 0, wie man sie auch verwalten? –

Verwandte Themen