删除 PHP Cookie?

7

我目前设置了一个如下的cookie:

setcookie("username",$username,time()+3600*24*5);

我该如何清除那个cookie的值,以便用户的用户名不再自动填充?

我会按以下方式清除它:

setcookie("username","",time()-60000);

用户的用户名仍然显示出来。
HTML表单:
<?php
    session_start();

    $username = NULL;
    $password = NULL;

    if(isset($_SESSION['username'])){
        $username = $_COOKIE['username'];
        $password = $_COOKIE['password'];
    }
?>
<html>
    <title>Login</title>
    <body bgcolor='#000000'>
        <font color="white">
    <H2><div align='center'>Login</div></H2>
    <form align='center' action='login.php' method='POST'>
            Username: <input type='text' name='username' value='<?$_COOKIE['username']?>'><br \>
            Password: <input type='password' name='password' value='<?$password?>'><br \>
            Remember Me <input type='checkbox' name='remember' value='rememberme'><br \>
            <input type='submit' value='Login'>
        </form>
        </font>
    </body>
</html>

处理表单的PHP脚本:
<?php
    session_start();

    $username = $_POST['username'];
    $password = $_POST['password'];

    //Hash password in a new variable
    $password2 = md5($password);

    require_once "/home/a7435766/public_html/scripts/dbconnect.php";

    $query = mysql_query("SELECT * FROM userstwo WHERE username = '$username' && password = '$password2'");

    if((mysql_num_rows($query)) != 0) {
        //Store username and password in a cookie
        if($_POST['remember'] == 'rememberme') {
            setcookie("username",$username,time()+3600*24*5,'','.ohjustthatguy.com');
            setcookie("password",$password,time()+3600*24*2,'','.ohjustthatguy.com');
        } else {
            setcookie("username","",time()-10,'','.ohjustthatguy.com');
            setcookie("password","",time()-10,'','.ohjustthatguy.com');
    }
        $_SESSION['username'] = $username;
        header('Location: http://www.ohjustthatguy.com/uploads/uploads.html');
        } else {
        header('Location: http://www.ohjustthatguy.com/uploads/');
    }
?>

在pastebin上查看原始代码


不,$_SESSION会一直持续到代表它的cookie被销毁、会话超时或者您调用session_destroy()。请参考这个教程:http://www.tizag.com/phpT/phpsessions.php - Nick ODell
1
你有一个安全漏洞。如果你在密码字段中输入 ' || ''=',会发生什么? - Nick ODell
http://pastebin.com/inwsRCdf 这个可以解决问题吗? - Jason
顺便说一下,当我访问这个网站时,我遇到了病毒检查错误。位置:ohjustthatguy.com所请求的位置包含恶意内容,被识别为Troj/Skiddie-A并已被阻止下载。 - Chud37
可能是删除cookie的重复问题。 - Zuul
显示剩余12条评论
3个回答

11

确保您删除具有与设置它相同的域名和路径的Cookie。例如,针对example.com和www.example.com设置的Cookie将被视为两个不同的Cookie。同样,从example.com和example.com/Support设置的Cookie将具有不同的路径。一种良好的实践是使用.example.com作为域和“ / ”作为路径,以便对于用户名类型的Cookie可以在您的子域之间共享。

要进行调试,您可以使用Firefox的FireCookie插件,该插件将显示所有此信息。


1
我的情况是它一直保持着错误的路径,“默认”的路径。我在不同的页面设置了cookie,同时在其他路径的某些其他页面中删除了它。谢谢! - Tom

7
将其过期时间设置为过去的某个时间应该会清除它:
setcookie("username",$username,time()-10);

如果你正在使用PHP会话来管理用户,那么你可能也想要使用 session_destroy()

1

如果您没有使用HTTPS协议,真的不应该将用户密码存储在Cookie中!每次请求时,密码都会以明文形式通过网络发送!此外,永远不要将用户的密码发送回去,这从来不是一个好主意。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接