我是不是在设置PHP$_SESSION变量后不久就测试了它


Am i testing for a PHP $_SESSION variable too soon after setting it?

在发送回响应文本之前,我有一个用AJAX和后端的PHP实现的登录设置$_SESSION['guest']。然后,前端的javascript将我重定向到guest页面,该页面检查是否isset($_SESSION['guest']),但通常这会导致错误,我会被带到另一个页面(使用我的else分支)。

我想知道我是否检查得太早了,这就是isset($_SESSION['guest'])结果为false的原因。但在重定向到测试它的页面之前,我让它倒计时5秒,所以这是我不理解的。

在它发生几次之后(我注销并再次登录),它停止了失败,我不能让它失败,这显然没有帮助!我认为这可能是缓存/cookie问题,但我已经清除了所有这些问题,它仍然不会再次失败。

有什么想法吗?

//this is the login script snippet    
if($rows == 1){
          $_SESSION[$type] = $username; //$type is posted over as guest or client. this is valid right?
          $_SESSION[$type.'_id'] = $result['id'];
          echo $_SESSION['welcome'] = 'You have logged in successfully.';
    }

<?php
//snippet from the guest page. session_start() is invoked within the included 'page_top.php'
    include('page_top.php');
    if(isset($_SESSION['guest'])){
        if(isset($_GET['sect'])){
            if($_GET['sect'] == 'photography'){
                include('view_album.php');
            }
            else{
                include('404.html');
            }
        }
        else{
            include('welcome.php');
        }
    }
    else{
        include('403.html'); //i get redirected here!
    }
    include('page_bottom.php');
?>

edit:我现在认为,当它失败时,会话变量就不会被设置,因为如果我重新加载我的guest页面,它每次都会导致403.html页面,所以这不是延迟,它就是没有被设置。

我认为在设置变量时不应该回显它?这对我来说毫无意义。

echo $_SESSION['welcome'] = 'You have logged in successfully.';

如果$type作为访客或客户发布,它不应该是$_SESSION[$_POST['type']];吗还是在页面的其他地方将$type设置为POST变量?

您必须将其包含在页面顶部(在ANY HTML或空白区输出之前,以及在<?php之后):

session_start();

编辑:

我知道这是一个老帖子。但对于未来需要它的人来说,它就在这里!