2015-06-20 129 views
3

我的代码:PHP,SetCookie函数不工作

$user_cookie = hash("sha512",$username); 
$salt1 = hash("sha512", rand() . rand() . rand()); 
setcookie("c_user", $user_cookie, time() + 12 * 60 * 60, "/"); 
setcookie("c_salt", $salt1, time() + 12 * 60 * 60, "/"); 

在本地主机上正常工作,但对Web服务器无法正常工作。我无法理解,为什么?这个代码包含在if和其他所有代码中,如果可以的话,但是这不是。如果我写回声$user_cookie."\n".$salt1;我有这些值!

+0

只是一个念头:你的网络服务器上的时间没有关闭12小时或更多,不是吗? – Blizz

+0

没有(我设置192小时进行测试 - 没有! –

+0

如果不是时间,其他可能的原因是路径参数(“/”)和域的问题(下一个可选参数)。 – Alexander

回答

1

这工作对我来说,从现在设置了一个小时的cookie运行的EasyPHP我的本地开发环境,并在GoDaddy的托管几个域服务器:

setcookie($cookie, $value, time()+3600, '/', '127.0.0.1', true); 

尝试增加您的域(第五个参数/ 127.0.0.1),我会建议安全布尔值设置为true,以及

2

根据setcookie()文档

setcookie()函数定义ALO发送一个cookie与HTTP 标题的其余部分一起使用。与其他标题一样,Cookie必须在您的脚本的 输出之前发送(这是协议限制)。这要求您在任何输出之前将 调用放入此函数,包括 标记以及任何空格。

我有同样的问题使用Cookie,代码在本地主机上工作正常,但不能在Web服务器上工作,除此之外,头文件也无法正常工作。我开始通过增加一个临时的一段代码到我的文件调试运行:

header("Location: /test"); 

我发现下面的代码工作正常

header("Location: /test"); 
include("myfile.php"); 

而另一个没有:

include("myfile.php"); 
header("Location: /test"); 

毕竟,我发现在?>之后有一个空格myfile.php

How to fix "Headers already sent" error in PHP