大家好,
我正在我们的网站上测试内部广告服务...
我需要保存内部会话(PHP)才能知道已经显示了哪些广告以及其他一些保护措施...
问题是,如果我通过Web浏览器GET或POST访问API,它将执行会话(并保存php会话的cookie),但是如果我使用jQuery.ajax()
方法,它将不保存...
我的测试链接是http://search.microdual.com
(这是因为我想在笔记本电脑上自定义Google搜索:p)
我建议您使用Firebug看一下javascript代码。 (不需要PHP代码,因为它可以实现点击操作...)
为了简化调试,我在服务器上的响应json数组上打印var {id_sessao:"..."}
上的会话ID。
提前致谢,
何塞·莫雷拉(JoséMoreira)
编辑:
来自服务器的标头:
Date Wed, 08 Sep 2010 11:24:48 GMT
Server Apache/2.2.8 (Ubuntu)
P3P CP="NOI NID ADMa OUR IND UNI COM NAV"
Cache-Control private, must-revalidate
Access-Control-Allow-Orig... *
Access-Control-Allow-Cred... true
Access-Control-Allow-Meth... OPTIONS, GET, POST
Access-Control-Allow-Head... Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control
Set-Cookie SN4b55935921bde=7ad280272050b4b44f17769909fd6f34; path=/ SN4b55935921bde=7ad280272050b4b44f17769909fd6f34; path=/
Keep-Alive timeout=15, max=97
Connection Keep-Alive
Transfer-Encoding chunked
Content-Type text/html; charset=UTF-8
jQuery Ajax请求的标头:
Host www.microdual.com
User-Agent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; pt-PT; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept application/json, text/javascript
Accept-Language pt-pt,pt;q=0.8,en;q=0.5,en-us;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Referer http://search.microdual.com/
Content-Length 29
Origin http://search.microdual.com
Pragma no-cache
Cache-Control no-cache
jQuery Ajax Request上的cookie控件在哪里?
最佳答案
问题可能是您的父文档位于search.microdual.com
上,并且您正在从www.microdual.com
请求脚本。会话Cookie不会跨域传输。
如果您不使用document.domain
-在任何地方都看不到它? -您还会遇到由于Single Origin Policy而导致AJAX调用失败的附加问题。
要解决Cookie问题,您可以选择
将Cookie的域设置为.microdual.com
,以便它在两个子域中均有效
在URL(?sessionid=xxxxx
)中手动进行会话,并使用session_id("xxxxx");
继续会话。
将两个脚本放在同一个子域(search.microdual.com
)
后者将是最简单的方法。