PHP setcookie无法正常工作

时间:2011-02-26 11:20:13

标签: 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.example.com', false, true);

}

header("Location: /"); 
exit();

我把ob_start()放在代码之上,所以这不应该是重点。

5 个答案:

答案 0 :(得分:13)

确保您的php.ini文件允许使用Cookie。此外,您绝不应将敏感数据存储在Cookie或会话变量中。

建议: 而是存储唯一的ID,然后在数据库中查询用户名和密码等详细信息。你只是要求以你的方式进行黑客攻击。

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

答案 1 :(得分:5)

确保在调用setcookie()函数之前不向浏览器发送任何输出。 ob_start()应停止“setcookie()之前的输出”错误,但可能无法正确实施。

答案 2 :(得分:3)

麦克是对的。在你输出任何东西之前,你们都要离开页面并杀死PHP执行。 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');