2012-10-11 94 views
1

我正在仔細研究這一點。我是新來的PHPCookie不會持續存在多個頁面PHP

我只是試圖把一個querystring變量放在一個cookie中,並讓它在網站上的所有頁面上都可用。現在發生的事情是,只有在存在查詢字符串時才設置cookie,並且一旦我進入另一個頁面,cookie就會消失。

我所有的PHP頁面有這樣的代碼頂部:

<?php 

$expire=time()+60*60*24*30; 

if (isset($_GET['v'])) { 
$thev = $_GET['v']; 

if (!isset($_COOKIE["ckv"])) { 
setcookie("ckv", $_GET['v'], $expire); 
} 
} else if (isset($_COOKIE["ckv"])) { 
$thev = $_COOKIE["ckv"]; 
} else { 
$thev = 'nothing'; 
} 
?> 
  1. 第1頁的作品! (顯示cookie)
  2. page1 no querystring WORKS! (顯示cookie)
  3. page2 BROKEN。 (Cookie不見了!)

**這些按順序點擊。所以,第3頁應該顯示的cookie

謝謝

+1

頁面2在不同的目錄或子域中? –

回答

1

我上面的答案達成一致,考慮使用的$ _COOKIE代替會議。他們比餅乾

http://us3.php.net/manual/en/features.sessions.php

+0

但是......他們做了不同的工作。如果您爲無狀態服務器場構建應用程序,那麼PHP會話實際上是無用的(您需要使用Cookie和數據庫進行備份)。如果您想要將數據從服務器共享到Javascript(在頁面加載時),那麼會話無法如此輕鬆完成(cookie可以)。您可能需要一個比cookie短的會話(但沒有權限更改服務器上的會話長度)。如果服務器重新啓動,會話也會丟失(因此您需要通過cookie +數據庫進行備份)。不同的事情,會議有他們的位置,餅乾有他們的。 – Robbie

0

更加靈活和更安全的顯著可以有三個答案,我可以看到這一點。

最有可能的是頁面1和頁面2在不同的目錄中。默認情況下,cookie被放置在當前目錄中(如瀏覽器中指定的那樣 - 忽略任何includes/apache重定向等),並將僅應用於該目錄。您是否有

/dir1/page1 
/dir2/page2 

然後在第1頁一個cookie不會,是默認情況下,在第2頁

可以解決這個問題可通過指定路徑(see documentation)。在這裏您聲明瞭cookie將應用於的目錄 - 最常見的是將其設置爲「/」(root),這意味着適用於應用程序中的任何頁面。


現在的一些陷阱:

正如你已經有了一個cookie在「/ DIR1 /」,如果你修改代碼以包括「/」的路徑和運行,那麼你會實際上有兩個餅乾 - 一個在'/'和一個在'/ dir1 /'。除非您先刪除它,否則您的第1頁仍會獲得'/ dir1 /'Cookie。還要檢查'/ dir2 /'中是否還有空白cookie(例如,在代碼中沒有「空白」,而不是空白 - 這意味着您有一個cookie,但空白值)。讓子目錄中的Cookie可能會引起很多挫折。

其他可能的原因是與緩存(確保你沒有緩存值)和不同的域(你不能跨域共享cookie,如果你想跨子域共享,那麼你需要指定根域 - 請參閱文檔)。