会话变量没有进入另一个内部文件PHP


Session variable not getting in another inner file PHP

当用户给出用户名和密码时,我有一个登录表单,它会导致login.php文件

session_start();
if ( isset( $_POST['username'], $_POST['password'] ) ) {  
    $user   = $_POST['username'] ;
    $pass   = $_POST['password'] ;
    $query  = " MY QUERY "; 
    $result = mysql_query($query) or die('SQL ERROR:'.mysql_error()); 
    $row    = mysql_fetch_assoc($result);   
    if ($row) {         
        echo "query successfull wrote to DB";       
        unset($_SESSION);
        $userName = $row['firstname'].' '.$row['lastname'];
        $_SESSION['userNameSession'] = $userName;
        $_SESSION['loginStatus']     = '1';
        header('location:admin/admin.php');
    }else{
        echo "unscccessful login";
        header('location:index.php');
    }
}

当我尝试通过print_r($_SESSION)从这个文件打印会话…它用值

显示会话及其变量
Array ( [userNameSession] => full name [loginStatus] => 1 )

在我的admin/admin.php(成功登录时打开)中写

    session_start();
    print_r($_SESSION);exit;

如果尝试通过print_r($_SESSION)打印会话,则显示空数组为Array()

请帮。

为什么要制作unset($_SESSION) ?这可能导致会话变量被删除,但会话仍然存在。

如果你想清理$_SESSION['LoginStatus']$_SESSION['userNameSession'],最好一个一个地清理(虽然这不是必要的,因为你以后会重写它的值):

unset($_SESSION['LoginStatus']);
unset($_SESSION['userNameSession']);

代码必须像这样:

session_start();
if ( !empty($_POST['username']) && !empty($_POST['password']) ) {  
    $user   = $_POST['username'] ;
    $pass   = $_POST['password'] ;
    $query  = " YOUR QUERY "; 
    $result = mysql_query($query) or die('SQL ERROR:'.mysql_error());   
    if (mysql_num_rows($result) > 0) {        
        //DELETE prints BEFORE header()!! -> echo "query successfull wrote to DB"; 
        $row = mysql_fetch_assoc($result);
        unset($_SESSION['userNameSession']);
        unset($_SESSION['loginStatus']);
        $userName = $row['firstname'].' '.$row['lastname'];
        $_SESSION['userNameSession'] = $userName;
        $_SESSION['loginStatus']     = '1';
        header('location:admin/admin.php');
    }else{
        //DELETE prints BEFORE header()!! -> echo "unscccessful login";
        header('location:index.php');
    }
}

有一件重要的事情你必须注意:

不要在header前回显。我认为你的代码应该是这样的:

session_start();
if ( isset( $_POST['username'], $_POST['password'] ) ) {  
    $user   = $_POST['username'] ;
    $pass   = $_POST['password'] ;
    $query  = " MY QUERY "; 
    $result = mysql_query($query) or die('SQL ERROR:'.mysql_error()); 
    $row    = mysql_fetch_assoc($result);   
    if ($row) {       
        unset($_SESSION);
        $userName = $row['firstname'].' '.$row['lastname'];
        $_SESSION['userNameSession'] = $userName;
        $_SESSION['loginStatus']     = '1';
        header('location:admin/admin.php');
    }else{
        header('location:index.php');
    }
}