如何分离发送到同一ip下的两台计算机的信息


How to separate information sent to two computers under same ip

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

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

当第一个人在思考一整晚的时候,第二个人连接到另一台电脑(在相同的网络下),并向购物车中添加了一个项目。第二个人意识到购物车中有一件他/她没有添加的额外商品。

我试着通过获取外部ip来分离它,然后使用本地ip来分离计算机,但这似乎很愚蠢,因为你不能使用本地ip,如果它不在本地服务器上托管。

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

永远不要使用ip来识别用户!

由于您提到的原因,您根本不应该通过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的同时而不是访问cookie;