2011-05-09 135 views
4

我設置一個cookie在本地主機上使用以下語法PHP設置cookie的問題

setcookie("testCookie ", "hello cookie", false, "/", false); 

的問題是我第一次訪問創建的cookie的網頁和螢火蟲顯示

Cookie testCookie added. hello cookie 

但它沒有讀取價值。如果我刷新頁面,值被讀取和消防錯誤顯示

Cookie testCookie changed. hello cookie 

我怎樣才能被讀取cookie的值首次加載頁面?

+0

什麼是你的代碼來檢測該cookie是要麼添加或更改?同樣爲了獲得cookie的值,在第一頁加載之後將不顯示它,它將在第二次刷新後顯示。 – 2011-05-09 11:14:50

+0

這是我的問題,爲什麼它不顯示在第一頁加載/我能做些什麼來讀取cookie的價值第一次? – Rafay 2011-05-09 11:17:14

+0

看到我的答案應該解釋它是如何工作的。 – 2011-05-09 11:18:43

回答

10

正如我p在我的評論中,從你的描述中(儘管相當模糊並且不太理解),我認爲這個問題可能是你在嘗試讀取cookie發送到服務器之前。

一個cookie的工作方式如下:

  1. 您提出請求
  2. 服務器發送cookie頭回客戶端
  3. 的網頁加載 - 曲奇可見PHP這個網頁上負載
  4. 刷新
  5. 客戶端發送的cookie頭到服務器
  6. 服務器RE CEIVES cookie頭,因此PHP可以讀取它
  7. 頁面加載 - Cookie IS可見此處。

如果您還沒有試過,請再次刷新!

由於您想在設置它的同時閱讀它,只需存儲您設置的值並使用它。或者(雖然這未經測試),您可以手動將其設置在$_COOKIE陣列中。

因此,像這樣:

setcookie("helloworld", ..); 
$_COOKIE['helloworld'] = $value; 

然後就可以正常閱讀。請注意,我不會推薦覆蓋自動超全局的值($_REQUEST,$_POST$_GET等等)。),而是建議您只存儲您正在設置和使用的值。


另一種方法是使用的「門戶」,這意味着你要設置cookie的網關頁面,那麼這將繼續爲您重定向到下一個頁面上的表單。

例如,假設你的流程如下:login.php - >account.php。而不是直接在account.php上登錄您的登錄表單,您有2個選項。

選項1:POST回login.php中,設置Cookie,然後重定向到account.php。 選項2:有一個網關,如logincheck.php,POST通過到,設置Cookie,然後重定向到account.php

這樣,account.php總能看到你的cookie。

+0

TNX人設定值手動的工作! – Rafay 2011-05-09 11:23:14

+0

沒有問題,只是用一個更好的解決方法上傳我的答案! :-) – 2011-05-09 11:25:25

3

它可能是相關或不相關的,但是您將布爾值分配給期望整數或字符串的參數。如果您是PHP新手,仔細閱讀本手冊並瞭解功能簽名非常重要。在這種情況下,你必須檢查http://php.net/setcookie在那裏你可以閱讀:

布爾的setcookie(字符串$名稱[, 字符串$值[摘要$到期= 0, 串$ PATH [,字符串$域[,布爾 $安全=假[,布爾$僅Http = 假]]]]]])

而且,我得到一個警告,當我運行代碼:

Warning: Cookie names cannot contain any of the following '=,; \t\r\n\013\014' 
+0

TNX的答覆,起初我無法設置cookie在localhost因此搜索得到這個代碼:)以後我會解決它... – Rafay 2011-05-09 11:24:16