php ajax控制会话变量消失

时间:2014-12-01 20:12:12

标签: php jquery ajax session

我有一个用户登录的页面,并设置了一些会话变量:

$_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页面的include。所以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');
}

&GT;

2 个答案:

答案 0 :(得分:1)

您可能遇到的一个问题是admin.php的include部分。虽然你想让session_start()几乎总是在每个新文件的开头,但是include部分只是将代码附加到登陆php文件,在一个“大”文件中有多个会话启动。

你可以解决这个问题的一种方法是在每个'子'php文件中,让会话开始写为 -

if (session_status() == PHP_SESSION_NONE) {
  session_start();
}

这适用于PHP 5.4及更高版本。对于早期版本,请使用

if (session_id() == '') {
  session_start();
}

答案 1 :(得分:1)

  <?php
  session_start();
  if ($_POST['action'] == "reports")
  {
include('reports.php');
  }
  if ($_POST['action'] == "logout");{    <------
include('logout.php');
  }
  if ($_POST['action'] == "api"){
include('apiMgmt.php');
  }

删除注销中的分号if if语句修复问题。