我正在创建购物车,我只是使用会话来更新购物车。但我想将它设置为cookie并且得到它进一步使用...我的购物车会话是:在Cookie中设置购物车会话
$_SESSION['cart'][$pid] = array("item_id" => $pid, "quantity" => $tobesend, "price" => $price_per_q);
我想这整件事设置成饼干。请帮助。 我想知道什么是好处,如果我使用网络存储来代替饼干这里...
谢谢。
我正在创建购物车,我只是使用会话来更新购物车。但我想将它设置为cookie并且得到它进一步使用...我的购物车会话是:在Cookie中设置购物车会话
$_SESSION['cart'][$pid] = array("item_id" => $pid, "quantity" => $tobesend, "price" => $price_per_q);
我想这整件事设置成饼干。请帮助。 我想知道什么是好处,如果我使用网络存储来代替饼干这里...
谢谢。
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 */
现在你从数据库中检索数据返回到会议?
更多资源的限制:
如@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>';
}
我只会用这个不重要的数据。
什么是重要的实际?在这里,我存储购物车的价格,数量和产品编号。这怎么可能如此重要?通过尝试XSS攻击可以用这些信息做些什么? – nick
你是这方面的判断者 - 使用cookies时提及任何安全风险很重要 – m79lkm
我想说重要数据应该是'需要安全的数据'。 – superUntitled
正如约书亚指出的,饼干并不是储存购物车信息的最佳场所。这类信息应该保存在服务器上。根据您的要求,这可能是会话数据或数据库。在客户端存储购物车信息不允许对购物车内容有任何洞察。例如,如果有人将物品留在购物车中,您可以通过发送提醒或将消息添加到店面页面来吸引他们。
要回答您的问题,Cookie是字符串,因此如果您想将购物车数据结构存储为Cookie,则需要对其进行序列化。有关serialize
和json_encode
的技术优点的讨论,请参阅this earlier question。
术语“网络存储”有点含糊不清。您是指HTML5本地存储?如果是这样,那么这可能不是一个好的选择,因为数据不会像使用cookie一样自动发送到每个请求的服务器上。
找到你的答案@nick? –