2011-08-04 46 views
3

這個小小的PHP代碼片段用來設置一個cookie,它可以讓我確定用戶是否登錄。出於某種原因,在我使用javascript重定向之後,我的cookie都不再被設置。爲什麼會發生這種情況?此代碼段爲什麼不能正確設置cookie?

我可能不會給你足夠的信息,以便讓我知道,如果是的話。

...some database queries... 
<?php 
    $expire=time()+(7 * 24 * 60 * 60); 
    $row = mysql_fetch_array($query); 
    $email = $row['email']; 
    $userinfo['name'] = $name; 
    $userinfo['email'] = $email; 
    $userinfo = serialize($userinfo); 
    setcookie("user", $userinfo, $expire); 
    echo '<script type="text/javascript"> 
     window.location = "../index.php"; 
    </script>'; 

?> 

回答

2

功能的setcookie返回true或false,這取決於cookie是否設置成功。你可以試試這個測試:

if(!setcookie("user", $userinfo, $expire)) { 
    echo 'Could not set cookie!'; 
} 

如果這返回false,那麼庫馬爾是正確的。否則必須有其他原因。

EDIT setCookie方法可以用多個參數被調用,例如:

setcookie(name,value,expire,path,domain,secure) 

通知的路徑和域值。由於不同的路徑/域,我以前遇到過兩個不同頁面的問題,因此無法找到彼此的Cookie。

我注意到,您重定向到「../index.php」。嘗試重定向到「index.php」並查看cookie是否存在。如果是,那麼你應該使用一個通用的「路徑」變量來設置cookie。

http://www.php.net/setcookie關於「路徑」變量:

其中的cookie將可在服務器上的路徑。如果設置爲「/」,則Cookie將在整個域中可用。如果設置爲'/ foo /',則cookie將僅在/ foo /目錄和所有子目錄(如/ foo/bar/of域)中可用。默認值是該cookie正在被設定的當前目錄。

+0

Rauni我覺得他在一個子文件夾中設置cookie,然後在根目錄中查看它,看看他正在重定向到的路徑,它不是'。/'它的'../',這可能會導致問題 – Kumar

+0

@Kumar我懷疑這個。我如何在根中設置它? – tnw

+1

使用'/',它將被設置爲root或使用'domain.com'作爲路徑,它應該爲你工作。看看我的評論 – Kumar

1

可能因爲$ userinfo是一個數組。它必須是一個字符串,存儲多個項目需要多個Cookie

+1

他連載數組轉換爲字符串。 – Kumar

+0

@Johan不,'$ userinfo = serialize($ userinfo);'使它成爲逗號分隔值,AKA是一個字符串。 – tnw

+0

你是對的,我的壞,我沒有注意到serialize() – Johan

4

保守黨,確保你不輸出任何你調用PHP設置setcookie之前。甚至沒有空白。沒有回聲。沒有。我猜想你的腳本在setcookie之前輸出了一些東西,這會打破你的腳本。你看到標題已經發送錯誤?評論你的JS,然後檢查。您的setcookie這樣

setcookie(name,value,expire,path,domain,secure); 

域需要在字符串如example.com,其可選的一個域名的價值。安全需要一個布爾值並且是可選的。跳過這兩個並通過設置路徑,以檢查「/」

+0

不,沒有頭已經發送錯誤。我的印象是,當我使用JavaScript來重定向而不是'header'功能時,如果我事先輸出,這並不重要。另外,'setcookie'和'header'一樣挑剔嗎?你確定我在'setcookie'之前不能輸出任何東西嗎? – tnw

+0

啊,路徑在哪裏?當你setcookie時,你也指定路徑,從你的JS,它看起來你正在'a.com/folder/setcookie'中設置cookie,這可能不適用於'a。com/checkcookie'如果你沒有指定路徑,路徑的默認值是當前工作目錄,將路徑設置爲'/'(斜槓),然後檢查 – Kumar

+0

明白了。如何設置Cookie的路徑? – tnw

相關問題