2012-03-23 16 views
5

He buscado jquery forum, stackoverflow, google, bing e incluso yahoo sin éxito. Cada 10 segundos Estoy intentando cargar un conjunto de datos de texto de servlet logservlet a través de este fragmento de jQuery:JQuery jsession cookie no se envía a un servidor

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 
    <script type="text/javascript"> 
      var autorefresh = setInterval(function() { 
       $.ajax({ 
        url : "logservlet?devkey=chat", 
        success : function(data) { 
         $("#log_ta").append(data); 
        } 
       }); 
       }, 10000); 
    </script> 

El problema es, en un lado del servidor no veo una sesión válida donde trato de seguir el atributos de sesión. El problema parece estar relacionado con la falta de "Cookie JSESSIONID = xxxxxxxxxxxxxxxxxxxxxxxxxxx" en el encabezado de las solicitudes http de JQuery. Me estoy poniendo las cabeceras de respuesta desde el servidor, con JSESSIONID siempre cambiando con cada solicitud:

Server Apache-Coyote/1.1 
    Set-Cookie JSESSIONID=9EEAFA2A933E7742D8FEDADD5345B76D; Path=/CumulusServer 
    Content-Length 0 
    Date Fri, 23 Mar 2012 13:02:08 GMT 

Pero JQuery no utiliza posteriormente, aquí están las cabeceras de petición:

Host 192.168.1.11:8080 
    User-Agent Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 
    Accept */* 
    Accept-Language en-us,en;q=0.5 
    Accept-Encoding gzip, deflate 
    Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
    Connection keep-alive 
    X-Requested-With XMLHttpRequest 
    Referer http://192.168.1.11:8080//CumulusServer/ 

¿Cuál es la cuestiones ¿aquí? ¿Las llamadas "$ .ajax" no son conscientes de la sesión? ¿O extraño algún código de fontanería para codificar el JSESSIONID manualmente en cada solicitud de Ajax? Es así, ¿cómo debería ser esto? Por cierto, cuando llamo a la misma URL desde el navegador web, el encabezado JSESSIONID se envía al servidor.

Gracias, D.

Respuesta

0

comprobar si tiene instalado en su navegador ninguna Ad Blocker. Muchos eliminarán las cookies de XHR.

2

De hecho sí ejecuto Adblock Plus, (gracias por la sugerencia) pero no tiene nada que ver con esto. En realidad, la cosa es un poco complicada. Encontré dos soluciones, pero no tengo una explicación de lo que está pasando.

Solución # 1: - ahorro de JSESSIONID manualmente cuando se carga la página:

var Session = { 
     id : '${pageContext.session.id}', 
     user : '${pageContext.request.remoteUser}' 
    }; 

    $(window).load(function() { 
     setCookie('JSESSIONID',Session.id); 
    }); 

    function setCookie(name,value,expires,path,domain,secure) { 
     var cookieString = name + "=" +escape(value) + 
      ((expires) ? ";expires=" + expires.toGMTString() : "") + 
      ((path) ? ";path=" + path : "") + 
      ((domain) ? ";domain=" + domain : "") + 
      ((secure) ? ";secure" : ""); 
     document.cookie = cookieString; 
    } 

Esto funciona bien y JSESSIONID consigue enviar más próximos en las peticiones Ajax en consecuencia.

Solución n. ° 2: - Añadiendo el tipo mime "text/plain" en el método servlet doGet(). Inicialmente en mi prueba no he configurado ningún tipo de contenido. Después de darme cuenta de que JQuery esperaba la respuesta XML de forma predeterminada, cambié mi método doGet() para establecer explícitamente el tipo de contenido así:

resp.setContentType ("text/plain");

Ahora, la llamada ajax también funciona bien, y no se necesita una gestión manual de cookies. No tengo una explicación de por qué la Solución # 2 funciona, pero lo es.

Gracias, D.

Cuestiones relacionadas