php ajax控制会话变量消失
我有一个用户登录的页面,并设置了一些会话变量:
$_SESSION['username'] = "Bob Smith";
$_SESSION['company'] = "acme Co";
$_SESSION['someData'] = "yes";
到现在为止还挺好。
现在用户在landing.php,在这里我有一系列用户用于导航的左侧链接。
<li class='menu' id='createUser'>Create New user</li>
<li class='menu' id='modUser'>Modify User</li>
<li class='menu' id='reports'>Reports</li>
<li class='menu' id='api'>API Management</li>
<li class='menu' id='logout'>Logout</li>
和导航jQuery:
$('.menu,.menu2').click(function(){
var action = $(this).attr('id');
$.ajax({
type: "POST",
url: "admin.php",
data: "action="+action,
success: function(result){
$('#modData').html(result);
}
});
admin.php返回var action的php页面的包含。 所以modUser.php或reports.php等都会以不同的形式和数据返回。
现在。 奇怪的事我不知道。 当我点击任何链接。 我的会话变量仍然设置。 当我再次点击任何链接(除注销外)时,所有会话变量数据都消失了。 除了在logout.php中,我没有任何session_destroy
任何这些页面上的print_r($ _ SESSION)只显示第一次变量....第二次单击我得到结果
Array()
我在每个页面都有session_start()。
我知道这是一个很长的时间,你可能需要更多的信息,但是这里有什么内在的错误,我错过了会导致会话数据被删除。
admin.php的
<?php
session_start();
if ($_POST['action'] == "reports")
{
include('reports.php');
}
if ($_POST['action'] == "logout");{
include('logout.php');
}
if ($_POST['action'] == "api"){
include('apiMgmt.php');
}
?>
您可能面临的其中一个问题是您的admin.php的包含部分。 虽然你想在每个新文件的开头几乎总是有一个session_start(),但是include部分只是将代码附加到登陆php文件中,在一个'large'文件中启动多个会话。
你可以解决这个问题的一个方法是在每个'child'php文件中,将会话开始写成 -
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
这是PHP版本5.4和更高版本。 对于早期版本,请使用
if (session_id() == '') {
session_start();
}
<?php
session_start();
if ($_POST['action'] == "reports")
{
include('reports.php');
}
if ($_POST['action'] == "logout");{ <------
include('logout.php');
}
if ($_POST['action'] == "api"){
include('apiMgmt.php');
}
如果声明修复了问题,请在注销中删除分号。
链接地址: http://www.djcxy.com/p/59729.html