【发布时间】: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