2012-04-02 64 views
1

表單提交後,我想將幾​​個指定的表單值存儲在一個PHP cookie中。我需要數據在瀏覽器關閉後保留,所以我不想使用會話。我當前呼叫看起來是這樣的:在PHP Cookie中存儲表單值的最佳方式是什麼?

if ($_GET) { 
    $params = $_GET; 
} 

有沒有一種方法來設置從$ _GET幾個PARAMS到$ _COOKIE,所以我可以在以後使用它們的用戶返回時?

+2

RTFM(http://uk3.php.net/manual/en/function.setcookie.php) – Ing 2012-04-02 12:16:19

+1

對不起......應該先這樣做,我猜。 – Paul 2012-04-02 12:18:16

回答

0

您可以使用序列化(),或做$ _GET值的foreach()循環,並設置那些在餅乾(不同的cookie爲每個值)

1

您仍然可以使用會話爲您解決問題。只需將session_set_cookie_params()(請參閱here)的cookie參數更改爲時間> 0(0意味着應在瀏覽器關閉時刪除它),並使用session_cache_expire()(請參見here)增加會話緩存生存期。

這樣做的好處是,即使客戶端不應該改變的數據也無法通過更改他的機器上的cookie來改變。

餅乾只

另一種方法可能包括一些序列化(如使用serialize()deserialize()或做一些你自己的低複雜性的東西就像一個分隔符簡單地加入一些參數)的參數直接存儲放入一個具有setcookie()功能的cookie中。獲取有關該here的更多信息。有了這個,你可以直接從超全球$_COOKIE中讀出cookie值。

+0

這是我從來沒有新的東西......我會研究這個,因爲它可能解決另一個問題:)謝謝! – Paul 2012-04-02 12:33:23

+0

@Paul在變形的方式中使用工具實際上並不新鮮。前些時候有人使用國家印章來破解堅果。會話在瀏覽器關閉之前是活着的。你是對的,而這個人是錯的。 – 2012-04-02 12:40:43

+1

@YourCommonSense這是不正確的。在通用語言中,會話cookie確實描述了在當前會話後刪除的一個會話(因此一旦瀏覽器關閉)。但在PHP中,通過更改cookie參數和緩存時間,可以使用相同的會話機制來更長時間地存儲數據。反對它的一個有效的觀點是,數據可能以低效和無法控制的方式存儲,而數據庫則更可靠。然而,與直接cookie方法相比,它具有提供數據保護和使用簡單性的巨大優勢。 – s1lence 2012-04-03 00:18:17

0

您可以使用foreach遍歷GET數組並設置其索引名稱。 試試這個 -

$expire=time()+60*60*24*30; 
foreach($_GET as $k=>$v){ 
    setcookie($k,$v,$expire); 
} 

這將設置相同GET數組索引cookie名稱,並在一個月後會過期。

相關問題