2014-03-07 40 views
3

我正在創建購物車,我只是使用會話來更新購物車。但我想將它設置爲cookie並且得到它進一步使用...我的購物車會話是:在Cookie中設置購物車會話

$_SESSION['cart'][$pid] = array("item_id" => $pid, "quantity" => $tobesend, "price" => $price_per_q); 

我想這整件事設置成餅乾。請幫助。 我想知道什麼是好處,如果我使用網絡存儲來代替餅乾這裏...

謝謝。

+1

找到你的答案@nick? –

回答

3

Cookies被人誰使用用戶的瀏覽器,最好的事情,以訪問do是將購物車會話存儲在數據庫中,並且只將該數據庫條目的行ID存儲在cookie中。所以基本上:

需要

// Get the row id from the cookie 
$id = $_COOKIE['cart_session_data_id']; 

// Use this ID and retrieve the data from the database 

爲什麼網絡存儲,而不是餅乾時

// Store the data in the database, in whatever form you choose 
$id = last_insert_id(); // Get the ID of the row in which this information is stored 

// Store the id in a cookie 
setcookie("cart_session_data_id", $id, time() + 3600 * 24); /* expire in 1 day */ 

現在你從數據庫中檢索數據返回到會議?

  1. 這不是明智的做法是在Cookie中存儲的敏感數據,因爲XSS攻擊可以得到所有的cookies
  2. 餅乾給你的每個域4096個字節

更多資源的限制:

  1. http://davidwalsh.name/php-cookies
  2. http://in3.php.net/setcookie
  3. Local Storage vs Cookies
  4. Keep $_SESSION alive with autorenewing counter
+2

這是存儲敏感信息的正確方法。 +1用於存儲在數據庫和您列出的文檔中。 – m79lkm

+0

我真的不明白id,數量和價格等信息的敏感性......你能解釋一下嗎? – nick

+1

敏感信息(我的定義)是您/您的客戶不希望任何黑客獲得的任何信息,如果他侵入您的客戶系統。假設一個嫉妒的朋友侵入你的客戶的計算機,你不希望那個朋友知道你的客戶正在購買避孕套,或者是個人的東西,或者他打算花費$ x購買。 –

1

如@Joshua Kissoon提到的,餅乾應僅用於非敏感信息和用於數據的量小。如果你需要使用一個cookie,你可以在一個陣列將數據和序列化:

$cart = array($pid => array("item_id" => $pid, "quantity" => $tobesend, "price" => $price_per_q)); 
setcookie("cart", serialize($cart)); 

檢查它,然後訪問它:

if (!empty($_COOKIE) && isset($_COOKIE['cart'])) { 
    $cart = unserialize($_COOKIE['cart']); 
    echo '<pre>';print_r($cart);echo '</pre>'; 
} 

我只會用這個不重要的數據。

+0

什麼是重要的實際?在這裏,我存儲購物車的價格,數量和產品編號。這怎麼可能如此重要?通過嘗試XSS攻擊可以用這些信息做些什麼? – nick

+0

你是這方面的判斷者 - 使用cookies時提及任何安全風險很重要 – m79lkm

+1

我想說重要數據應該是'需要安全的數據'。 – superUntitled

0

正如約書亞指出的,餅乾並不是儲存購物車信息的最佳場所。這類信息應該保存在服務器上。根據您的要求,這可能是會話數據或數據庫。在客戶端存儲購物車信息不允許對購物車內容有任何洞察。例如,如果有人將物品留在購物車中,您可以通過發送提醒或將消息添加到店面頁面來吸引他們。

要回答您的問題,Cookie是字符串,因此如果您想將購物車數據結構存儲爲Cookie,則需要對其進行序列化。有關serializejson_encode的技術優點的討論,請參閱this earlier question

術語「網絡存儲」有點含糊不清。您是指HTML5本地存儲?如果是這樣,那麼這可能不是一個好的選擇,因爲數據不會像使用cookie一樣自動發送到每個請求的服務器上。