2012-03-23 38 views
5

Tôi đã tìm kiếm diễn đàn jquery, stackoverflow, google, bing và thậm chí cả thành công của yahoo. Mỗi 10 giây Tôi đang cố gắng để tải một dữ liệu văn bản từ servlet logservlet qua đoạn JQuery này:Cookie JQuery jsession không được gửi đến máy chủ

<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> 

Vấn đề là, trên phía máy chủ tôi không thấy một phiên hợp lệ để tôi cố gắng theo dõi thuộc tính phiên. Vấn đề dường như liên quan đến việc thiếu "Cookie JSESSIONID = xxxxxxxxxxxxxxxxxxxxxxxxxxx" trong tiêu đề của các yêu cầu http từ JQuery. Tôi nhận được tiêu đề phản hồi từ máy chủ, với JSESSIONID luôn luôn thay đổi với mỗi yêu cầu:

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

Nhưng JQuery không sử dụng nó sau đó, đây là những tiêu đề yêu cầu:

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/ 

các vấn đề là gì đây? Các cuộc gọi "$ .ajax" có phải là phiên không nhận biết được không? Hay tôi bỏ lỡ một số mã ống nước để mã hóa JSESSIONID theo cách thủ công trong mỗi yêu cầu ajax? Vậy thì, nó trông như thế nào? Btw, khi tôi gọi cùng một url từ trình duyệt web, tiêu đề JSESSIONID được gửi đến máy chủ!

Cảm ơn, D.

Trả lời

0

Kiểm tra xem bạn có bất kỳ Blocker rao vặt cài đặt trong trình duyệt của bạn. Nhiều người sẽ loại bỏ cookie khỏi XHR.

2

Thật vậy, tôi chạy Adblock Plus, (cảm ơn mẹo) nhưng không liên quan gì đến điều này. Thực ra điều này hơi phức tạp một chút. Tôi tìm thấy hai giải pháp, nhưng tôi không có giải thích những gì đang xảy ra.

Giải pháp # 1: - tiết kiệm JSESSIONID cách thủ công khi tải trang:

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

này hoạt động tốt và JSESSIONID được gửi qua trong các yêu cầu ajax tiếp theo cho phù hợp.

Giải pháp # 2: - Thêm loại mime "văn bản/đơn giản" trong phương thức doGet() của servlet. Ban đầu trong bài kiểm tra của tôi, tôi chưa đặt bất kỳ loại nội dung nào. Sau khi tôi nhận ra rằng JQuery đang chờ phản hồi XML theo mặc định, tôi đã thay đổi phương thức doGet() của máy chủ của mình để đặt kiểu nội dung một cách rõ ràng như vậy:

resp.setContentType ("text/plain");

Hiện tại, cuộc gọi ajax cũng hoạt động tốt và không cần quản lý cookie thủ công. Tôi không có giải thích tại sao Solution # 2 lại hoạt động, nhưng đúng vậy.

Xin cảm ơn, D.

Các vấn đề liên quan