当它是ajax调用时,PHP不会保存会话

cus*_*pvz 2 php ajax session jquery

大家好,
我正在测试我们网站上的内部广告服务......
我需要保存内部会话(PHP)以了解广告已展示的内容以及其他一些保护内容......

问题是,如果我通过webbrowser GET或POST访问API,它会进行会话(并保存php会话的cookie),但是如果我使用jQuery.ajax()方法它不会保存它 ...

我的测试链接是http://search.microdual.com
(这是因为我想在我的笔记本电脑上进行自定义谷歌搜索:p)

我建议你用firebug来看一下javascript代码.(不需要PHP代码,因为它正在处理点击...)为了简化调试,我打印出来自服务器的响应json数组, var上的会话ID {id_sessao:"..."}...

在此先感谢
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
Run Code Online (Sandbox Code Playgroud)

来自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
Run Code Online (Sandbox Code Playgroud)

jQuery Ajax请求上的cookie控件在哪里?

Pek*_*ica 5

问题可能是您的父文档已打开search.microdual.com,并且您正在请求脚本www.microdual.com.会话cookie不会跨域传输.

如果您不使用document.domain- 我在任何地方都看不到它?- 您还将遇到由于单一来源策略而导致AJAX调用失败的其他问题.

要修复cookie问题,您也可以

  • 设置cookie的域,.microdual.com使其在两个子域中都有效

  • 在URL(?sessionid=xxxxx)中手动传递会话并使用继续会话session_id("xxxxx");.

  • 将两个脚本放在同一个子域(search.microdual.com)

后者将是最简单的方法.