【问题标题】:Unsetting PHP session variable doesnt display error message不稳定的 PHP 会话变量不显示错误消息
【发布时间】:2015-05-08 20:50:39
【问题描述】:

当用户名密码不匹配时,我试图显示错误消息。如果用户名和密码不匹配,我会设置一个 php 会话变量。然后我返回同一页面,如果设置了变量,则使用 if 条件 php 语句显示错误。但是当我在错误显示后取消设置变量时,页面上没有显示错误。

我在这个论坛上看到过类似的问题。但我似乎按照问题中的建议做的一切都是正确的。请帮帮我...

这是我的代码流的一部分...

<?php
ob_start();
session_start();
.
.
if ($result = $sth->fetch(PDO::FETCH_ASSOC)){
            $_SESSION['admin_user'] = $result['id'];
            header('Location: admin_user.php');
        } else {
            $_SESSION['user_found'] = 0;
            header('Location: index.php');
        }
.
.
//in html body
<?php
    if (isset($_SESSION['user_found'])){
        if($_SESSION['user_found'] == 0){
?>  
    <div>
    <p class = "bg-danger text-danger">Username Password Mismatch</p>
    </div>

<?php   
unset($_SESSION['user_found']);
        } 
    }

?>

现在,如果 unset 被删除..它工作正常。如果存在,则不会显示错误消息。

【问题讨论】:

  • $_SESSION['user_found'] 的值是多少?
  • @CodingCracker 如果我评论 unset() 和 echo,它会为 $_SESSION['user_found'] 给出正确的 0 值

标签: php session unset


【解决方案1】:

尽量不要重新加载同一页面..删除标题重定向。

if ($result = $sth->fetch(PDO::FETCH_ASSOC)){
            $_SESSION['admin_user'] = $result['id'];
            header('Location: admin_user.php');
        } else {
            $_SESSION['user_found'] = 0;
            //header('Location: index.php');
        }

【讨论】:

  • 是的..在这个改变之后,代码工作正常..但是你能告诉为什么它不能更早地工作。
  • 当页面加载一次时,它会取消设置你的变量。如果在某些情况下你的页面再次加载,变量已经取消设置,因此你看不到任何警告。这可能是发生在你没有提到的代码..
【解决方案2】:

当我尝试您的代码时,一切似乎都正常。你这里没有提到的代码应该有问题..

解决问题而不是

unset($_SESSION['user_found']);

尝试改变变量的值..说

$_SESSION['user_found'] = -1;

【讨论】:

  • 我尝试按照您的建议更改代码。它仍然没有显示错误。如果我评论那行代码..它会显示消息..我没有放在这里的代码只包含 html 和 mysql 交换的一部分.. mysql qrks 很好,因为一旦用户身份验证,我就可以重定向并访问为设置的会话变量它..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 2012-05-03
  • 2018-03-25
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多