我正在创建购物车,我只是使用会话来更新购物车。但我想将其设置为cookie并检索它以供进一步使用...我的购物车会话是:
$_SESSION['cart'][$pid] = array("item_id" => $pid, "quantity" => $tobesend, "price" => $price_per_q);
我想将整个事情设置为cookie。请帮忙。 我想知道如果我在这里使用网络存储而不是cookie,有什么好处......
谢谢..
答案 0 :(得分:3)
Cookies,最好的办法是将购物车会话存储在数据库中,并且只将该数据库条目的行ID存储在cookie中。所以基本上:
// 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 */
现在,您需要在需要时将数据从数据库中检索回会话
// Get the row id from the cookie
$id = $_COOKIE['cart_session_data_id'];
// Use this ID and retrieve the data from the database
为什么选择网络存储而不是Cookie?
更多资源:
答案 1 :(得分:1)
正如@Joshua Kissoon所提到的,cookie只应用于非敏感信息和少量数据。如果您需要使用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>';
}
我只会将此用于不重要的数据。
答案 2 :(得分:0)
正如约书亚所指出的,饼干并不是存放购物车信息的最佳地点。这类信息应保存在服务器上。根据您的要求,可以是会话数据或数据库。在客户端存储购物车信息不允许任何洞察购物车内容。例如,如果有人在购物车中留下商品,您可以通过发送提醒或向商店页面添加消息来吸引他们。
要回答您的问题,Cookie是字符串,因此如果您想将购物车数据结构存储为Cookie,则需要对其进行序列化。有关serialize
和json_encode
的技术优势的讨论,请参阅this earlier question。
术语“网络存储”有点含糊不清。你指的是HTML5本地存储?如果是这样,那可能不是一个好的选择,因为数据不会像每个cookie一样自动发送到服务器。