0

看起来它应该工作:

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() 放在代码之上,所以这不应该是重点。

4

5 回答 5

13

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

建议:改为存储一个唯一的 id,然后查询数据库以获取用户名和密码等详细信息。您只是要求以您的方式被黑客入侵。

不要消极,只是一个有用的预防技巧。

于 2011-07-06T01:53:16.697 回答
5

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

于 2011-12-20T00:25:03.087 回答
3

迈克是对的。在您输出任何内容之前,您既要离开页面又要终止 PHP 执行。ob_start()实际上是问题所在:它打开了输出缓冲区(而不是实际发送数据)。如果您想发送某些内容,您必须刷新缓冲区(使用ob_end_flush())或等待 PHP 脚本正常结束。因此,在您的情况下,根本不会发送 cookie。

于 2012-10-05T09:05:14.570 回答
1

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

于 2012-08-29T15:17:59.490 回答
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');
于 2011-02-26T13:12:25.077 回答