【问题标题】:$_SESSION lost on AJAX request$_SESSION 在 AJAX 请求中丢失
【发布时间】:2015-05-14 09:56:04
【问题描述】:

我有一个 Smarty 项目,它也适用于 jQuery,几天前我在其中遇到了一个问题。 index.php

  session_start();
  require_once 'controller.php';

 *//nothing else happens here*

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

controller.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 加载。

【问题讨论】:

  • 您还没有完全解释问题?显示您调用会话变量的代码在哪里?
  • 这是一个简单的 print_r($_SESSION);在被调用的ajax文件中
  • 也许,我应该更好地指定它....第一个 $.get 不会丢失会话,只有第二个会。

标签: javascript php jquery ajax session


【解决方案1】:

您似乎没有在您的 Ajax 页面上调用 session_start()

【讨论】:

  • 与 tha AJAX 一起使用的 index.php 完全是同一个文件,其中包含 session_start() :/
  • var_dump($_SESSION) 对这些页面有什么帮助?
  • 第一次调用和第一次 $.get 调用的正确值 .... 第二次 $.get 的空白
猜你喜欢
  • 2013-07-06
  • 2015-02-14
  • 2017-04-06
  • 2015-04-01
  • 1970-01-01
  • 2018-03-22
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多