我拥有域jdavis.software
并且有两个子域om.jdavis.software
和api.jdavis.software
。我只是尝试从设置om
变量的api
到$_SESSION
进行异步(ajax)调用,然后重新加载相同的om
页面显示会话。我在php.ini中设置了session.cookie_domain = .jdavis.software
,以便创建会话来自同一个根域。
域:
Apache vhost config :(对于子域及其相关目录)
AllowOverride All
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Allow-Origin "*"
api.jdavis.software/test.php
<?php
session_start();
function test(){
$_SESSION['test'] = 123;
}
test();
print_r($_SESSION);
exit();
?>
om.jdavis.software/index.php
<?php
session_start();
print_r($_SESSION);
?>
<!DOCTYPE html>
<html>
<head>
<script>
var ajax = function(data){
http = new XMLHttpRequest();
http.open((data.method) ? data.method : "POST", (data.url) ? data.url : "/");
http.send(data.params);
http.onreadystatechange=()=>{
if(http.status != 404){
http.addEventListener("load", data.callback);
}
else{
console.log("Error: Issue with server call...");
}
}
};
function submitForm(form) {
var form = new FormData(form);
ajax({
url: "http://api.jdavis.software/test.php",
method: "POST",
params: form,
callback: function(e){
console.log(e.target.response);
}
});
event.stopPropagation();
event.preventDefault();
return false;
};
</script>
</head>
<body>
<form onSubmit="submitForm(this);">
<input type="submit">
</form>
</body>
</html>
sessions_id是相同的,当我在运行ajax调用并重新加载页面后print_r($_SESSION)
时,没有任何打印甚至不是id ......
问题:为什么$_SESSION
个变量没有打印出来?
答案 0 :(得分:0)
我已经结束了将此添加到我的headers.conf
文件中,该文件将动态添加Origin域,只要它在列表中就可以了。
基本上Apache会监听原点,如果它匹配正则表达式模式中的一个域,那么Header add Access-Control-Allow-Origin
。
<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(om\.)?(jdavis.software|google.com|whatever|domains|you|want)$" AccessControlAllowOrigin=$0
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
</IfModule>