看起来应该有效:
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()放在代码之上,所以这不应该是重点。
答案 0 :(得分:13)
确保您的php.ini文件允许使用Cookie。此外,您绝不应将敏感数据存储在Cookie或会话变量中。
建议: 而是存储唯一的ID,然后在数据库中查询用户名和密码等详细信息。你只是要求以你的方式进行黑客攻击。
不要消极,只是一个有用的预防性提示。
答案 1 :(得分:5)
确保在调用setcookie()
函数之前不向浏览器发送任何输出。 ob_start()
应停止“setcookie()
之前的输出”错误,但可能无法正确实施。
答案 2 :(得分:3)
ob_start()
实际上是问题所在:它打开输出缓冲区(而不是实际发送数据)。如果要发送某些内容,则需要刷新缓冲区(使用ob_end_flush()
)或等待PHP脚本的正常结束。因此,在您的情况下,根本不会发送cookie。
答案 3 :(得分:1)
查看该代码片段我会说问题是cookie永远不会发送到用户的浏览器。 Cookie存储在客户端,而不是服务器端;你正在创建两个新的但后来立即调用exit(),它会在从服务器向用户发送任何响应之前终止PHP脚本。
答案 4 :(得分:0)
试试这个
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');