2009-03-04 62 views
36

在做了一些處理之後,我想將cookie值設置爲用戶輸入,然後將它們重定向到新頁面。但是,Cookie沒有設置。如果我將重定向註釋掉,那麼cookie將被成功設置。我認爲這是某種頭部問題。這種情況的最佳解決方法是什麼?我如何設置一個cookie,然後在PHP中重定向?

if($form_submitted) { 
    ... 
    setcookie('type_id', $new_type_id, time() + 60*60*24*30); 
    header("Location: $url"); 
    exit; 
} 

注意的setcookie返回在兩種情況下true和我沒有得到任何錯誤/警告/通知。

編輯:我使用的Unix /阿帕奇/ MySQL的/ PHP

+1

你的頭後,該cookie嘗試設置()? – 2009-03-04 19:23:21

+0

sikx - 如果我首先使用header(),cookie不會被設置。 – Wickethewok 2009-03-04 19:30:56

+0

我有一個問題,位置:http:// domain.com/asd`不會保存cookie。做`Location:/ asd`解決了我的問題。 – Znarkus 2010-12-15 15:35:59

回答

65

如果你有人類網址或子文件夾(如www.domain.com/path1/path2/),則必須設置cookie路徑爲/爲所有路徑的工作,而不僅僅是當前一個。

if($form_submitted) { 
    ... 
    setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/'); 
    header("Location: $url"); 
    exit; 
} 

從PHP手冊:

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

+4

然後你應該問@ @ QuestionMark。 – Xeoncross 2012-01-10 20:46:47

2

如何,如果cookie設置你的測試?設置好後,可以在下一個頁面上找到Cookies。

常見缺陷:

餅乾不會成爲可見,直到一個頁面,該Cookie應該是可見的未來負載。要測試cookie是否設置成功,請在cookie過期之前在下一個加載頁面上檢查cookie。過期時間通過expire參數設置。調試cookie存在的一個好方法是簡單地調用print_r($ _ COOKIE);.

+0

我正在檢查cookie是否通過瀏覽器插件設置。即使我然後導航到另一個頁面並檢查我的cookie,它也沒有設置。 – Wickethewok 2009-03-04 19:31:33

4

我假設你正在運行IIS?當嘗試在同一個請求中設置cookie和位置標頭時,IIS版本小於7就有一個已知錯誤。

http://support.microsoft.com/kb/q176113/

+1

我正在使用IIS並碰到這個確切的問題。你知道一個.php腳本的解決方法嗎? – 2011-03-16 17:39:38

2

我能夠通過使用刷新頭部有輕微的延遲來解決這個問題。我們設置標題(必須在可能輸出的任何方法之前完成,例如setcookie),然後設置cookie。我添加了一條消息,以便用戶在幾秒鐘內看不到空白屏幕。

header("refresh: 2; url=$url"); 
    setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/'); 
    echo "Processing, please wait..."; 
0

在標題中使用相對URL:

@Header("Location: orders_9090_1.php"); 
相關問題