我正在创建一个购物车,我只是使用会话来更新购物车。但我想将其设置为 cookie 并检索它以供进一步使用......我的购物车会话是:
$_SESSION['cart'][$pid] = array("item_id" => $pid, "quantity" => $tobesend, "price" => $price_per_q);
我想把这整件事设置成cookie。请帮忙。而且我想知道如果我在这里使用网络存储而不是cookie有什么好处......
谢谢你..
我正在创建一个购物车,我只是使用会话来更新购物车。但我想将其设置为 cookie 并检索它以供进一步使用......我的购物车会话是:
$_SESSION['cart'][$pid] = array("item_id" => $pid, "quantity" => $tobesend, "price" => $price_per_q);
我想把这整件事设置成cookie。请帮忙。而且我想知道如果我在这里使用网络存储而不是cookie有什么好处......
谢谢你..
任何使用用户浏览器的人都可以访问cookie,最好的办法是将购物车会话存储在数据库中,并且只将数据库条目的行 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?
更多资源:
正如@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>';
}
我只会将其用于不重要的数据。
正如 Joshua 所指出的,cookie 并不是存储购物车信息的最佳场所。此类信息应保存在服务器上。根据您的要求,这可能是会话数据或数据库。在客户端上存储购物车信息不允许对购物车内容有任何了解。例如,如果有人将商品留在购物车中,您可以通过发送提醒或向店面页面添加消息来吸引他们。
要回答您的问题,cookie 是字符串,因此如果您想将购物车数据结构存储为 cookie,则需要对其进行序列化。有关和的技术优点的讨论,请参阅前面的问题。serialize
json_encode
“网络存储”一词有点含糊。您指的是 HTML5 本地存储吗?如果是这样,那可能不是一个好的选择,因为数据不会像 cookie 那样在每个请求上自动发送到服务器。