JQuery jsession cookie不会发送到服务器

我搜索了jquery论坛,stackoverflow,谷歌,bing,甚至雅虎没有成功。 每隔10秒我就会尝试通过这个JQuery片段从logservlet servlet加载文本数据:

  var autorefresh = setInterval(function () { $.ajax({ url : "logservlet?devkey=chat", success : function(data) { $("#log_ta").append(data); } }); }, 10000);  

问题是,在服务器端,我没有看到有效的会话,我试图跟踪会话属性。 问题似乎与在JQuery的http请求的标头中缺少“Cookie JSESSIONID = xxxxxxxxxxxxxxxxxxxxxxxxxxx”有关。 我从服务器获得响应头,JSESSIONID总是随每个请求而变化:

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

但是JQuery后来没有使用它,这里是请求头:

  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/ 

这有什么问题? “$ .ajax”调用不会识别会话吗? 或者,我是否会错过一些管道代码来在每个ajax请求中手动硬编码JSESSIONID? 是这样,这应该怎么样? 顺便说一句,当我从网络浏览器调用相同的URL时,JSESSIONID标头被发送到服务器!

感谢:D。

事实上,我确实运行Adblock Plus,(感谢提示),但它与此无关。 实际上这件事有点棘手。 我找到了两个解决方案,但我没有解释发生了什么。

解决方案#1: – 在页面加载时手动保存JSESSIONID:

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

这工作正常,JSESSIONID相应地在下一个ajax请求中发送。

解决方案#2: – 在servlet doGet()方法中添加“text / plain”mime类型。 最初在我的测试中,我根本没有设置任何内容类型。 在我意识到JQuery默认需要XML响应之后,我改变了我的服务器doGet()方法来显式设置内容类型,如下所示:

resp.setContentType( “text / plain的”);

现在,ajax调用工作正常,实际上不需要手动cookie管理。 我没有解释为什么解决方案#2有效,但确实如此。

感谢:D。

检查您的浏览器中是否安装了任何广告拦截器。 许多人会从XHR中删除cookie。