php
  • jquery
  • ajax
  • session
  • 2014-12-01 76 views -1 likes 
    -1

    我有一个页面,用户登录和一些会话变量被设置: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动作的PHP页面。所以modUser.php或reports.php等都会以不同的形式和数据返回。

    现在。奇怪的事我不知道。当我点击任何链接。我的会话变量仍然设置。当我再次点击任何链接(除注销外)时,所有会话变量数据都消失了。我没有任何地方session_destroy除了logout.php

    任何这些页面的显示变量仅在第一次

    的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'); 
    } 
    

    ?>

    +0

    检查每个页面上的'session_id()'。如果值发生变化,那么你会丢失会话cookie并获得新/空会话。会议不可能被破坏,只会被抛弃。通常这是一个cookie设置问题。 – 2014-12-01 20:13:33

    +0

    域始终保持不变?尝试至少两个浏览器 – 2014-12-01 20:15:17

    +0

    似乎你的问题可能在admin.php某处。也许你应该发布。 – Rooster 2014-12-01 20:15:37

    回答

    1

    一个你可能会面临的问题是包括你admin.php的一部分。虽然你想在每个新文件的开头几乎总是有一个session_start(),但是include部分只是将代码附加到登陆php文件中,在一个'large'文件中启动多个会话。你能解决这个

    一种方法是在每个“孩子” php文件,已在会话开始写作 -

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

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

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

    嗯,你的回答是不是正确的,但它确实让我找到了解决方案,所以你可以获得奖励积分。 – bart2puck 2014-12-01 20:59:12

    +0

    @ bart2puck嗯....介意问题是什么?出于好奇的缘故。 – user3334871 2014-12-01 21:05:07

    +0

    添加了我自己的答案,在admin.php第二if语句if($ _POST ['action'] ==“logout”);有一个错误的分号......所以它每次都发射。 – bart2puck 2014-12-01 21:05:45

    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语句解决了这个问题。

    相关问题