2012-07-08 59 views
4

我需要在cookie中存儲一些數組數據,我一直在研究最好的方法來做到這一點,許多人似乎用serialize說是要走的路,但隨後在這個線程中:在餅乾中存儲數組

PHP how to stringify array and store in cookie

..someone建議反對使用它作爲「連載將調用序列化類的構造函數,這是不好的,因爲它可能會導致代碼執行。」

所以我不知道我有什麼其他選擇?那麼base64_encode

我不能使用sessions,因爲我需要後關閉瀏覽器保留數據;儘管我也很擔心Cookies 4KB的限制。

FWIW我的存儲中存儲的內容某人的購物車購物車數據,需要將其裝回自己的車,當他們回來。

回答

5

如何生成一個唯一的ID,將其存儲在cookie中,您的存儲陣列序列化和數據庫中的ID?

例子:

// ------------ STORING TO COOKIE AND DATABASE ------------ // 
$id = uniqid(); 
setcookie("id", $id, time()+60*60*24); // 1 day 

$serialized = serialize($array); 
mysql_query("INSERT INTO yourTable (id, array) VALUES ('$id', '$serialized')"); 


// ------------ SELECTING FROM DATABASE ------------ // 
if(!isset($_COOKIE['id'])) die(); 
$id = mysql_real_escape_string($_COOKIE['id']); 

$result = mysql_query("SELECT array FROM yourTable WHERE id = $id LIMIT 1"); 
if(!is_resource($result)) die(); 
$serialized = mysql_result($result, 0); 
$array = unserialize($serialized); 
+1

+1,似乎是最好的解決辦法,因爲它的高度最好不要使用Cookie來存儲比標識或輕微設置其他的東西。 – Adi 2012-07-08 11:04:06

0

曲奇它是不是最好的方式存儲用戶數據 用戶必須對您的網站授權,並且所有的數據必須由USER_ID

4

被存儲在數據庫擴展以前的意見和answrs,你應該嘗試真的很難避免數據被存儲在cookie中,而不是指針數據,如ID到數據庫行。

假設,所有的客戶端是敵人(我認爲是合理的假設),錯餅乾 - 無論是惡意的或只是馬車 - 將無法做太多的傷害,如果只有一個指標:

  • 無效:默默刪除它
  • 錯誤:通過將ID與正在請求它的用戶進行比較來檢查;如果是這樣,默默地放下它
  • 有效;使用它

我的peronally更喜歡沉默地滴在錯誤消息,因爲我有直覺,這可能會讓很少有真正的惡意用戶更難。