【问题标题】:Am i testing for a PHP $_SESSION variable too soon after setting it?我是否在设置 PHP $_SESSION 变量后过早地对其进行测试?
【发布时间】:2011-09-02 21:53:34
【问题描述】:

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

我想知道是不是我检查得太早了,这就是 isset($_SESSION['guest']) 导致错误的原因。但是我在重定向到测试它的页面之前让它倒计时 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');

?>

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

【问题讨论】:

  • 不,我已经推断出,因为我在记录它 5 秒后给它,但它仍然不起作用,它一定不是每次都设置变量。而且我认为这不是缓存问题,因为这更有可能导致您返回时意外登录,但在我开始访问时总是无法登录
  • 这可能是因为我使用 $type 设置会话变量的键,而不是直接使用字符串,例如 'client' 或 'guest'?

标签: php ajax session-variables


【解决方案1】:

您必须在页面顶部包含此内容(在任何 HTML 或空白输出之前,以及在

session_start();

编辑:

我知道这是一篇旧帖子。但是对于将来需要它的任何人来说,它都在这里!

【讨论】:

    【解决方案2】:

    我认为你不应该在设置变量时回显它?这对我来说没有任何意义。

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

    如果 $type 以访客或客户身份发布,不应该是$_SESSION[$_POST['type']]; 还是您将 $type 设置为页面中其他位置的 POST 变量?

    【讨论】:

    • 你引用的表达式的结果是$_SESSION['welcome'] 变成了字符串'You have logged in successfully.',然后那个字符串被回显。 = 运算符的返回值是右手边的值,即分配给的值(以及分配给的变量的新值)。
    • 我知道它的作用,我只是不知道为什么有人会这样做。
    • 你的意思是echo $_SESSION['welcome'] = 'You have logged in successfully.';这个位吗?我很确定这样做很好。无论哪种方式,它都是在设置麻烦之后完成的。这只是简写
    • 是的,我在页面前面设置了 $type。
    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2012-08-30
    • 2012-01-26
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    相关资源
    最近更新 更多