2015-06-20 127 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