【发布时间】:2019-01-26 14:04:00
【问题描述】:
我有一个域 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 的开发工具中使用 Network > Cookies 来跟踪这一点。我可以确认会话 id 确实不同,并且在通过 AJAX 执行此操作时未正确传递。
在我的 AJAX 调用中,我设置了 crossDomain: true,在我的 PHP 文件中设置了 header("Access-Control-Allow-Origin: *");。
我真的很茫然。
我所说的所有搜索都是为了修改 php.ini 文件。但是,我已经做到了。跨子域会话确实有效。只是不是通过 AJAX 调用。
非常感谢任何想法。
谢谢!
【问题讨论】:
标签: php ajax subdomain session-cookies