Javascript 从处理子域而不是ajax请求的子域传递php会话 问题

Javascript 从处理子域而不是ajax请求的子域传递php会话 问题,javascript,php,ajax,apache,Javascript,Php,Ajax,Apache,我有一个完全通过JavaScript生成的页面。我通过从子域(ajx.example.com)上的PHP脚本请求数据来获取内容,然后以JSON格式返回 如果用户登录,此特定页面的一个要求是“可编辑”(这是JSON中的一个键,“isEditable”:true)。如果我直接访问请求页面(在子域上),并且用户已登录(在主域上),isEditable始终是true。但是,如果我通过Ajax请求它,它总是false 这些子域通过MAMP上的VirtualHost完成,并且都指向同一目录 www.exam

我有一个完全通过JavaScript生成的页面。我通过从子域(
ajx.example.com)
上的PHP脚本请求数据来获取内容,然后以JSON格式返回

如果用户登录,此特定页面的一个要求是“可编辑”(这是JSON中的一个键,
“isEditable”:true
)。如果我直接访问请求页面(在子域上),并且用户已登录(在主域上),
isEditable
始终是
true
。但是,如果我通过Ajax请求它,它总是
false

这些子域通过MAMP上的VirtualHost完成,并且都指向同一目录
www.example.com
位于
htdocs/example

ajx.example.com
位于
htdocs/example/ajax

v1.examplecdn.com
位于
htdocs/example/cdn


代码 这是init页面(
www.example.com/app/init.php
):

ini_set("session.cookie_domain", ".example.com"); // make sure all sessions are available on all subdomains
error_reporting(E_ALL);
session_start();

// I include the user class here
require_once "../app/init.php"; // (/htdocs/example/app/init.php)
header("Content-type: application/json;charset=utf-8", false);
header("Access-Control-Allow-Origin: http://www.example.com", false);

$user = new User();
$editable = false;

if($user->loggedIn()){ // check if user is logged in (this is stored in a session on .example.com
    $editable = true;
}
die(json_encode(array("isEditable" => $editable)));
这是请求页面(
ajx.example.com/request.php
):

下面是请求Ajax
v1.examplecdn.com/request.js
):


要求 如果有人能告诉我如何通过这些子域访问这些PHP会话,我将不胜感激
干杯。

在此设置之前,您是对的- ini_set(“session.cookie_domain”,“.example.com”);//确保所有会话在所有子域上都可用

但是,由于不同VM上有不同的域,它们无法共享会话,因为每个VM将创建自己的新会话副本,为了允许会话共享,您需要将会话保存在DB或缓存服务中,如memcache、redis等

在db表中保存会话的说明如下


我不知道你从哪里得到“不同的VM”,这个问题只提到虚拟主机。你的
ajax
函数在哪里设置跨域请求传递cookie所需的参数?@CBroe老实说,我不知道这是一个要求。我该怎么做?:)
var container = document.getElementById("container");
ajax({
    url: "//ajx.example.com/request.php", // (/htdocs/example/ajax/request.php)
    dataType: "json",
    success: function(res){
        if(res.isEditable){
            console.log("editable"); // this doesn't come through as isEditable is false.
        }
    }
});