【问题标题】:PHP isn't saving session when it's an ajax call当它是一个 ajax 调用时,PHP 不保存会话
【发布时间】:2011-04-09 15:38:47
【问题描述】:

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

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

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

我建议你使用 firebug 来看看 javascript 代码。 (不需要 PHP 代码,因为它正在处理点击...) 为了简化调试,我在 response json array from server 上打印出 var {id_sessao:"..."}...

上的会话 ID

提前致谢,
何塞·莫雷拉

编辑:

来自服务器的标头:

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 请求上的 cookie 控件在哪里?

【问题讨论】:

  • @CuSS 是您的 Ajax 请求脚本,实际上使用 session_start() 继续会话?
  • @Pekka 是的,尝试点击广告图片并通过萤火虫查看标题,它会发送 cookie。不是阿贾克斯。
  • @Cuss 你没有在域的子目录中设置会话 cookie?
  • PHP代码和你放HTML的代码必须解压

标签: php jquery ajax session


【解决方案1】:

问题可能是您的父文档位于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)

后者是最简单的方法。

【讨论】:

  • 如何将 cookie 设置为多个域?与microdual.comsearch.microdual.comexample.com 合作(比如*?)因为我会将这些广告放在我们公司的多个页面上,但php 脚本将始终在www.microdual.com
  • @CuSS 可能是的,但正如我所说,你也会遇到跨域问题
  • +1 表示服务器未跨域保留会话。如果您只是在自己的网站上使用 http 和 https,那就太糟糕了。
猜你喜欢
  • 2013-11-10
  • 2020-04-13
  • 1970-01-01
  • 2022-11-25
  • 2021-01-07
  • 2018-03-07
  • 1970-01-01
  • 2011-06-06
  • 2014-10-12
相关资源
最近更新 更多