Después de la invalidación de una sesión, es posible obtener nueva sesión a través de objeto de solicitud a través de la solicitud.getSession() sin necesidad de efectuar una nueva solicitud?

Mi objeto de solicitud de flujo a 1 de la página a la 2ª página y 2º página 1 de página 1 de la página a la 2ª página y de nuevo el mismo 2ª página a la 2ª página ….página de solicitud no se pueden cambiar, pero cada vez que la solicitud de 1º de la página a la 2ª página tenemos que recuperar el detalle de la sesión y la invalida y otra vez creado..
como este

HttpSession session = request.getsession(false)
String user = (String)session.getAttribute("name");
session.invalidate();
session=request.getSession(true);
RequestDispacher dis = request.requestDispatcher("path");
dis.forword(request,respone);

pero esto no funciona en el 2do tiempo
le da a la sesión nula o detalles

también intenta poner el id de sesión en los próximos cookies
como este

Cookie[] c = request.getCookies();
            for(Cookie k: c){
                if(k.getName().equalsIgnoreCase("JSESSIONID")){
                    System.out.println("k.getValue() : "+k.getValue());
                    System.out.println("httpSession.getId() : "+httpSession.getId());
                    k.setValue(httpSession.getId());
                }
            }
  • ¿Por qué te invalidar la sesión si usted lo necesita?
  • para fines de seguridad
InformationsquelleAutor Mask5323 | 2013-08-16

2 Comentarios

  1. 3

    Como por la Javadocs, simplemente llame a request.getSession():

    Devuelve el actual HttpSession asociados con esta solicitud o, si no hay ninguna sesión actual y crear es true, devuelve una nueva sesión.

    Si cree que es falso y que la solicitud no válida HttpSession, este
    el método devuelve null.

    Para asegurarse de que la sesión se mantiene correctamente, usted debe llamar a este
    método antes de la respuesta comprometida. Si el contenedor está utilizando
    cookies para mantener la sesión de la integridad y se le pide que cree una nueva
    la sesión, cuando la respuesta está comprometido, un IllegalStateException es
    lanzado.

    Por lo que llamar a la getSession método creará una nueva sesión:

    final HttpSession session = request.getSession()

    He aquí un ejemplo de JSP que demuestra que el código funciona:

    de la prueba.jsp

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Session invalidation test</title>
    </head>
    <body>
    <% 
    
    //Uses implicit session for JSP
    
    out.println("Session is " + session);
    session.invalidate();
    out.println("\nNew session is " + request.getSession());
    
    request.getRequestDispatcher("/test2.jsp").forward(request, response);
    
    %>
    </body>
    </html>

    test2.jsp

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Session invalidation test</title>
    </head>
    <body>
    <% 
    
    out.println("Session is " + request.getSession());
    
    %>
    <h1>Test 2</h1>
    </body>
    </html>

    Cuando se ejecuta en Tomcat6, la salida en mi navegador es:

    Session is org.apache.catalina.session.[email protected]
    Test 2

    que indica test.jsp fue exectued y reenviado con éxito a test2.jsp.

    • Usted también puede utilizar request.getSession() sin el argumento booleano.
    • Probado en la JSP y actualizada; gracias.
    • estoy de acuerdo en tu ans pero mi pregunta es después de esto.println(«Sesión» + session); sesión.invalidate(); out.println(«Nueva sesión» + request.getSession()); y solicitud de llamada despachador y por otra ruta y la llamada petición de sesión.getSession así ican conseguiría que se da a null, pero yo necesitaba en mi proyecto para mantener la sesión y también sequire mi sesión a nadie diablos es
    • Creo que hay que evaluar seriamente sus requisitos y realmente entender lo que significa la seguridad, cómo lograrlo con Java EE y quizá consultar a alguien que es un experto en seguridad de aplicaciones web. Mira OWASP y entender que la primera.
    • Ver mi respuesta actualizada; he extendido mi prueba para probar lo que funciona.
  2. 0

    Después de la invalidate()

    usted debe escribir

    req.getSession(true)

    Luego getSession() método de comprobar si ya de una sesión existente o no. Si un session es existente, se return que el objeto de la sesión, de lo contrario una nueva sesión crea y devuelve al cliente.

    de lo contrario, si tratas de hacer algo como

    session.inValidate();
    session..trySomething()  //leads to exception "Session already invalidated."
    • yo intente esto pero la próxima vez que tenemos el objeto de la sesión en el mismo objeto de solicitud..da null ….
    • +1 para explicar cómo la excepción es lanzada por intentar llamar a método en invalida la sesión. Gracias.

Dejar respuesta

Please enter your comment!
Please enter your name here