2014-03-07 192 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一样自动发送到每个请求的服务器上。