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

上一篇: php ajax control session variables disappearing

下一篇: PHP adds "532142118" to session variable