在 AJAX 请求中损失了 _SESSION 美元


$_SESSION lost on AJAX request

我有一个与jQuery一起工作的Smarty项目,几天前我在那里为一个问题而苦苦挣扎。 索引.php

  session_start();
  require_once 'controller.php';
 *//nothing else happens here*

然后我加载我的控制器和模板

控制器.php

<?php
    isset($_GET[controller]) ? $controller="/".$_GET[controller] : $controller = "/index";
    isset($_GET[department]) ? $department="/".$_GET[department] : $department = "/index";
   require_once "controller".$department.$controller.".php";
   $smarty->display("templates" . $department . $controller . ".tpl");

在页面加载时,我的jQuery会自动加载不同的子模板,并且我已经在每个控制器文件的开头回显了$_SESSION内容

这是我的 JS

autoload_subtemplate = function(data) {
var target    = data.target;
var id        = data.id;
*//fill target container*
var page2load = data.page.split("_");
$.get("http://"+GLOB_ENV+"MYDOMAIN/"+page2load[0]+"/"+page2load[1]+"?"
  + "import=1"
  + "&data=" + JSON.stringify(data),function(content){
    $("#"+target).html(content);
    *//searching for content to autoload*
    if( $('#'+target).parent().attr("id")=="content" ){
      $("a.auto.loadsubtpl").each(function(){
        var load = $(this).attr("loadtarget");
        var page = $(this).attr("loadpage").split("_");
       //****************************************************
       //the file, loading now, returns an empty $_SESSION
       //NOTE: it's the same action, as the $.get some lines above
       //where the SESSION is NOT lost!!!
       //****************************************************
        $.get("http://"+GLOB_ENV+"MYDOMAIN/"+page[0]+"/"+page[1]
          +"?import=1"
          +"&data=" + JSON.stringify(data),function(details){
          $("#"+load).append(details);
          $(this).addClass("active");
          $("#"+load).show();
        });
      });
    }
  }
);
return false;
};

现在奇怪的是:如果我把echo "whatever";放进我的root/index.php,在session_start();之后,$_SESSION仍然存在。

由于这种解决方法有点愚蠢,我想知道是否有人对此有解释。

我只是在相关的 php 文件中调用print_r($_SESSION),我通过 AJAX 加载。

看起来你没有在 Ajax 页面上调用session_start()