如何正确使用Cookie来存储购物车?

时间:2018-10-25 12:27:41

标签: php

到目前为止,我的情况是用户按下登出按钮时,购物车将被销毁/取消。

unset($_SESSION[CART_COOKIE]);

setcookie(CART_COOKIE,'',1,"/",$domain,false);**

之后,如果我以同一用户身份登录,则购物车将被移除。当我销毁它时。

所以我试图删除setcookie('','','','','',''),并且当我以相同的用户身份登录时,购物车项目仍保留在那里。

但是,如果我登录到另一个用户,则无法将购物车添加到该特定用户,而是仍将购物车添加到先前的用户。

任何提示?

1 个答案:

答案 0 :(得分:0)

我认为您正在混合使用$_COOKIE$_SESSION超全局变量。
会话是手动创建的,然后在用户注销时销毁-如果网站制作正确:您必须手动销毁该会话-或在他离开后销毁该会话(不活动超时-由服务器配置管理)。
Cookie存储在用户的浏览器中,您必须手动创建/删除它们。

从这里可以看到,您正在创建一个cookie:

setcookie(CART_COOKIE,'',1,"/",$domain,false);

然后删除会话变量:

unset($_SESSION[CART_COOKIE]);

这些不是同一个变量!

要使用Cookie来存储购物车:

setcookie(CART_COOKIE . $user_id, '', 1, "/", $domain, FALSE); //replace $user_id with some specific value for account-less carts
echo ($_COOKIE[CART_COOKIE . $user_id]);

unset($_COOKIE[CART_COOKIE . $user_id]) //if the user destroys his cart, OR if there is already an account-less cart.

要使用会话变量(推荐):

if (!$user_id) { //If the user is not logged in (account-less cart)
    $_SESSION["cart"] = $value; //store the value un a session variable
    echo ($_SESSION["cart"]); //retrieve the value
} else { //If the user is logged in
    //store the value in a database (+bonus : you can have log data)
    //OR retrieve data.
    //Both need SQL requests.
}