0

我正在尝试使用 PHP 制作购物车系统。我的购物车系统允许用户将产品添加到他们的购物车并将其保存在那里,而无需登录(作为访客),只需参考用户 IP。你们中的一些人已经知道这是怎么回事。

现在让我们考虑两个不同的人在两台不同的计算机上从同一个网络(使用相同的 IP)连接并尝试访问我的购物车系统。第一个人将产品添加到购物车中,并考虑一夜之间是否获得它。

当第一个人彻夜思考时,第二个人连接到另一台计算机(在同一网络下)并将物品添加到购物车。第二个人意识到购物车中有一个他/她没有添加的额外物品。

我尝试通过获取外部 ip 然后使用本地 ip 来分隔计算机来将其分开,但这似乎很愚蠢,因为如果本地 ip 未托管在本地服务器上,则您不能使用它。

我不希望客户在使用购物车之前登录。许多电子商务网站已经找到了一种方法,允许客户从同一网络下的多台计算机更新购物车,而不会有任何计算机干扰彼此的结果(购物车中显示的项目)。

4

2 回答 2

0

永远不要使用 ip 来识别用户!请改用 cookie。

于 2015-08-15T05:24:30.580 回答
0

由于您提到的原因,您根本不应该通过 IP 地址识别个人 - 多个用户可以在同一个网络上。相反,使用会话cookie来存储此信息。由于您希望在用户关闭浏览器窗口之后存储此信息,因此您应该使用 cookie,因为它们更持久。

如何在 cookie 中存储购物车详细信息的示例如下所示:

<?php
setcookie("cart", "item, another item, yet another item", time()+3600*24*365*10, '/');
?>

然后你可以使用explode来获取所有的物品。

<?php
foreach (explode(",", $_COOKIE['cart']) as $item) {
  echo trim($item); // Will output each item in the cookie cart
}
?>

或者,如果您想将每个项目存储在单独的 cookie 中,您也可以这样做:

<?php
// It doesn't matter what you name the cookies in this case as you will be looping through all of them, you just need a unique string
setcookie("item 1", "item name 1", time()+3600*24*365*10, '/');
setcookie("item 2", "item name 2", time()+3600*24*365*10, '/');
setcookie("item 3", "item name 3", time()+3600*24*365*10, '/');
// Need page reload to access cookies
foreach ($_COOKIE as $item) {
  echo $item;
}
?>

关于 cookie 的重要说明:您不能在设置 cookie 的同时访问它;您必须在两者之间重新加载页面。

于 2015-08-15T05:20:46.660 回答