-1

我有一个名为的登录页面signin.php,用户可以在其中输入电子邮件和密码。单击提交按钮后,页面指向connection_validate.php. 此页面使用数据库验证用户输入的数据。如果是注册用户,则页面指向calendar.php. 如果输入的数据不正确,它应该重定向到signin.php. 如果输入的数据不正确,我会这样放置cookie:

//action to be done if e mail id and password matches with database records             
if(mysql_num_rows($result)>0)
{
    header('location:calendar.php');
}
//action to be done if e mail id and password does not matches with database records 
else
{
    setcookie('message','incorrect login data');
    header('location:signin.php');
}

在 signin.php 中,我编写了用于在登录信息不正确时显示警报的代码,如下所示:

<?php
include("include/minfooter.php"); 
if(isset($_COOKIE["message"]))
{
    if(!($_COOKIE["message"]==" "))
    {
        echo "<script>
    alert('Incorrect login information');
    </script>";
    setcookie("message"," ",time()-3600);
    }
}
?>

我的问题是,如果我输入了一次错误登录数据,则每次加载登录页面时都会显示警报。如果我也按下 calendar.php 中的后退按钮到 signin.php,警报开始显示。我知道问题出在cookie上。Cookie 尚未删除。我该如何解决这个问题?

4

3 回答 3

1

如下更新您的 signin.php

<?php
    include("include/minfooter.php");
    if (isset($_COOKIE["message"]))
    {

        echo "<script>
                var delete_cookie = function(name) {
                    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
                };
                var msg = '" . $_COOKIE["message"] . "';
                if (msg != '')
                    alert('Incorrect login information');
                delete_cookie('message');
            </script>";
    }
?>
于 2012-12-18T05:21:23.573 回答
1

如果您使用会话,则可以使用 $_SESSION 变量而不是 cookie 值。此外,您不能在输出内容后使用 setcookie(),因为 setcookie() 将发送一个 HTTP 标头,该标头必须在发送任何内容之前发送。

session_start();
//action to be done if email id and password matches with database records
if (mysql_num_rows($result) > 0)
{
    header('Location: calendar.php');
    exit;
}
//action to be done if email id and password does not matches with database records
else
{
    $_SESSION['message'] = 'incorrect login data';
    header('Location: signin.php');
    exit;
}

然后:

<?php

session_start();
include("include/minfooter.php"); 

if (!empty($_SESSION['message']))
{
    echo "<script>alert('" . $_SESSION["message"] . "');</script>";
    $_SESSION['message'] = '';
}

?>
于 2012-12-18T05:28:11.427 回答
0

好吧,也许更好地使用会话,在 $_SESSION 数组上使用索引 ['messages'],然后进行清理,当您想要在用户离开页面后引用一些信息时应该使用 cookie。我制作了关于使用 cookie 的代码,但考虑使用会话:

<?php include("include/minfooter.php"); 
        if(isset($_COOKIE["message"]) && !empty($_COOKIE["message"])
        {
                echo "<script>
                    var msg = '<?php echo $_COOKIE["message"];?>';
                    if (msg != "")
                    alert('Incorrect login information');
                  </script>";
              unset($_COOKIE["message"]);
        }
?>
于 2012-12-18T05:29:05.573 回答