我有一个页面,通过 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
以下是请求页面(ajx.example.com/request.php
):
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)));
这是请求 Ajax (v1.examplecdn.com/request.js
):
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.
}
}
});
如果有人能够指出我如何制作它以便可以通过这些子域访问那些 PHP会话,那么非常赞赏!
/>
欢呼声。
答案 0 :(得分:0)
你是对的,直到这个设置 - ini_set(“session.cookie_domain”,“。example.com”); //确保所有会话都在所有子域上都可用
但由于您在不同的VM上有不同的域,因此无法共享会话,因为每个VM都会创建自己的新会话副本,以允许您需要在DB或缓存服务中保存会话的会话共享,像memcache,redis等。
这里已经解释了在db表中保存会话
How do I save session data to a database instead of in the file system?