我有一个域, 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调用时不会。
任何想法都会受到赞赏。
谢谢!
答案 0 :(得分:0)
不包括“。”在顶级域名之前。而且httprequestobject需要(bool)obj.withCredentials = tree;以便该对象访问跨域Cookie。