首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >会话管理-交叉子域

会话管理-交叉子域
EN

Stack Overflow用户
提问于 2017-06-19 20:20:22
回答 1查看 170关注 0票数 0

我有域jdavis.software和两个子域om.jdavis.softwareapi.jdavis.software。我只是尝试从om到设置$_SESSION变量的api进行异步(ajax)调用,然后重新加载相同的om页面并显示会话。我已经在我的session.cookie_domain = .jdavis.software中设置了php.ini,因此会话创建来自同一个根域。

域:

  • om.jdavis.software/index.php
  • api.jdavis.software/test.php

Apache配置:(用于子域及其相关目录)

代码语言:javascript
运行
复制
 AllowOverride All
 Header set Access-Control-Allow-Credentials "true"
 Header set Access-Control-Allow-Origin "*"

api.jdavis.software/test.php

代码语言:javascript
运行
复制
<?php       
session_start();

function test(){
    $_SESSION['test'] = 123;
}
test();
print_r($_SESSION);
exit();
?>

om.jdavis.software/index.php

代码语言:javascript
运行
复制
<?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>

会话_id是相同的,在运行ajax调用并重新加载页面之后,当我print_r($_SESSION)时,没有任何输出,甚至不打印id.

问题:为什么$_SESSION变量没有打印出来?

EN

回答 1

Stack Overflow用户

发布于 2017-06-20 07:48:52

我得出的结论是将其添加到我的headers.conf文件中,只要它在列表中,它就会动态地动态添加原产地域。

基本上,Apache将侦听原始信息,如果它与regex模式中的某个域匹配,那么Header add Access-Control-Allow-Origin

代码语言:javascript
运行
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44639273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档