PHP设置cookie不工作

PHP设置cookie不工作,php,setcookie,Php,Setcookie,看起来它应该可以工作了: if ($_POST['stayloggedin'] == 'stayloggedin') { setcookie("user", $_POST['mail'], time()+7*24*60*60, '/', 'subdomain.example.com', false, true); setcookie("hash", md5(sha1(md5($_POST['pw']))), time()+7*24*60*60, '/', 'subdomain.

看起来它应该可以工作了:

if ($_POST['stayloggedin'] == 'stayloggedin') {

    setcookie("user", $_POST['mail'], time()+7*24*60*60, '/', 'subdomain.example.com', false, true);
    setcookie("hash", md5(sha1(md5($_POST['pw']))), time()+7*24*60*60, '/', 'subdomain.example.com', false, true);

}

header("Location: /"); 
exit();
我把ob_start()放在了代码的顶部,所以这不应该是重点。

试试这个

setcookie("user", $_POST['mail'], time()+7*24*60*60, '/', '.example.com');
setcookie("hash", md5(sha1(md5($_POST['pw']))), time()+7*24*60*60, '/', '.example.com');

确保您的php.ini文件允许cookies。。此外,决不能将敏感数据存储在cookie或会话变量中

建议: 而是存储一个唯一的id,然后查询数据库中的用户名和密码等详细信息。你只是想用你现在的方式被黑客攻击


不是消极的,只是一个有用的预防提示。

在调用
setcookie()
函数之前,确保没有向浏览器发送任何输出
ob_start()
应该停止“output before
setcookie()
”错误,但它可能没有正确实现。

查看该代码片段,我会说问题在于cookie从未发送到用户的浏览器。Cookies存储在客户端,而不是服务器端;您正在创建两个新的PHP脚本,但随后立即调用exit(),这会在从服务器向用户发送任何响应之前终止PHP脚本。

mike是对的。在输出任何内容之前,您都将离开页面并终止PHP执行
ob_start()
实际上就是问题所在:它打开了输出缓冲区(而不是实际发送数据)。如果希望发送内容,则必须刷新缓冲区(使用
ob\u end\u flush()
),或者等待PHP脚本的正常结束。因此,在您的情况下,cookies根本不发送。

什么不起作用?你确定失败的是cookie调用,而不是条件吗?发生了什么或没有发生什么?你检查了HTTP响应头吗?检查代码是否输入了条件你对哈希的处理是个坏主意。如果你在主域而不是子域中检查它,它将无法访问。我在错误中发送setcookie之前的输出,所以这个建议是一个有用的提示。谢谢,请确保在cookie中存储随机生成的身份验证密钥。如果您只存储一个用户id,那么任何用户都可以通过编辑cookie以任何其他用户的身份登录。您需要要求cookie同时包含用户ID和数据库检查的随机密钥。