以编程方式清除cookie

时间:2012-12-18 05:11:11

标签: php mysql cookies

我有一个名为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尚未删除。我该如何解决这个问题?

3 个答案:

答案 0 :(得分: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>";
    }
?>

答案 1 :(得分: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'] = '';
}

?>

答案 2 :(得分:0)

好吧也许最好使用session在$ _SESSION数组上使用index ['messages'],然后清理,当你想在用户离开你的页面后引用一些信息时应该使用cookie。我使用cookie制作了代码,但考虑使用session:

<?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"]);
        }
?>