跨子域的会话ID更改-通过AJAX调用时

时间:2019-01-26 05:06:22

标签: php ajax subdomain session-cookies

我有一个域, example.com 。在该域上,我有两个子域,分别是 code.example.com www.example.com

我的php.ini文件中包含以下行: session.cookie_domain = ".example.com"

如果我在 code.example.com 上有一个简单的PHP页面,该页面设置了一个PHP会话变量,则 www.example.com 上的页面可以读取该会话变量

code.example.com/test.php

session_start();
$_SESSION["testa"] = "a";

www.example.com/test.php

session_start();
echo("session testa = " . $_SESSION["testa"]);

这已被证明并且有效。它正确地呼应 session testa = a

但是,如果我做同样的事情,但是这次,如果我在 www.example.com 上有一个调用 code.example.com/test.php 的页面>通过AJAX,当我在 www.example.com/test.php 上读取会话变量时,它将失败。会话变量不存在。

我使用Firefox开发工具中的网络> Cookies对此进行了跟踪。我可以确认会话ID确实有所不同,并且在通过AJAX进行操作时无法正确传递。

在AJAX调用中,我设置了crossDomain: true,在PHP文件中设置了header("Access-Control-Allow-Origin: *");

我真的很茫然。

我说过的所有修改php.ini文件的搜索。但是,我已经做到了。跨子域会话确实有效。通过AJAX调用时不会。

任何想法都会受到赞赏。

谢谢!

1 个答案:

答案 0 :(得分:0)

不包括“。”在顶级域名之前。而且httprequestobject需要(bool)obj.withCredentials = tree;以便该对象访问跨域Cookie。