2015-08-15 32 views
0

我正在尝试使用PHP制作购物车系统。我的购物车系统允许用户将产品添加到购物车并将其保存在那里,而无需简单通过参考用户IP来登录(作为访客)。你们中有些人已经知道这是怎么回事。如何将信息发送到同一ip下的两台电脑

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

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

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

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

+2

Afaik其他网站为此使用会话 – bish

回答

0

由于您提到的原因,您不应该通过IP地址识别个人 - 多个用户可以在同一个网络上。而应使用sessionscookies来存储此信息。由于您希望将这些信息存储在用户关闭浏览器窗口时的位置,因此应该使用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; 
} 
?> 

关于cookies重要提示:您可以访问一个cookie在你设定的同时;您必须在两者之间重新加载页面。

+1

一个重要的附录:不仅多个用户经常共享相同的IP,而且单个用户的IP有时会改变。这对移动设备特别常见。 – duskwuff

-1

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

相关问题