大家好,
我正在我们的网站上测试内部广告服务...
我需要保存内部会话(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


后者将是最简单的方法。

10-04 22:51