2016-03-09 37 views
1

我正在开发一个有许多产品的网站。对于每个产品,我都想显示一个计数器,其中包含观看它的不同用户的数量。页面计时器

我面临的问题是会有用户登录而其他用户没有登录,而且这样做可以避免同一用户多次增加一个“手表”。

那么,解决这个问题的最好方法是什么?我如何存储信息?

+0

这样做没有百分之百的方法,因为它都依赖于用户可能不想提供的客户端识别。如果您认为自己的用户“很友善”,并且不介意被跟踪,那么您可以向他们发送一个带有唯一散列的跟踪Cookie,以便即使他们未登录也能识别您的网站。 – apokryfos

回答

-1

对于简单的解决方案,您可以:

  1. 为了分离“观点”的用户,你可以依靠用户的IP。
  2. “查看” 信息可以存储在一个简单的表格product_view(ID,PRODUCT_ID,view_ip,USER_ID)
-1

你可以,例如,在数据库中创建一个表watched像这样:

------------------------------------------ 
| ID | PRODUCT_ID | IP  | USER_ID | 
|----------------------------------------| 
| 1 | 22  | 127.0.0.1 | NULL | 
------------------------------------------ 
| 2 | 23  | 127.0.0.1 | 2  | 
------------------------------------------ 

在第一个raw中,这是访问您的产品页面22的未经身份验证的用户的示例。

在第二个示例中,它是访问您的产品页面的经过身份验证的用户。所以你存储它的IP和它的ID。

感谢这种方法,您可以轻松检查用户是否访问过您的产品页面。在每次访问时,您只需要通过用户的ID来满足您的数据库,并且需要感谢php变量$_SERVER['REMOTE_ADDR']

祝你好运! :)

+0

这有几个问题: (1)同一用户可以更改IP(因为静态IP代价昂贵)(2)同一局域网内的多个用户具有相同的IP但不被视为多用户。 – apokryfos

+0

有几种方法可以绕过这种过程,并且没有任何可能性来统一每个独特的用户。如果你倒退了,请给我们你的答案,我迫不及待地想看到比我更好的提议。 –

0

这对于非注册用户根本无法完成。您可以做的最接近的事情,实际上Web分析服务在实践中做的是创建一个跟踪cookie。

在其最简单的形式,它看起来是这样的:

<?php 
if (isset($_COOKIE["trackingId"])) { 
    $uid = $_COOKIE["trackingId"]; 
} else { 
    $uid = uniqid(); 
    setcookie("trackingId",$uid,2147483647); 
} 

注意分析网站将尝试使用它可以唯一地识别用户如他们收到的硬件功能,屏幕分辨率等

信息

创建一个表:

由用户观看

productId, userId, trackingId 

您可以使用此表来跟踪谁在看你的产品。普通注册用户将被存储一个userId。未注册的用户将与他们的跟踪ID一起存储。

这种方法的优点是,即使用户改变了IP,你也可以在同一个浏览器中跟踪同一用户。缺点是只要用户清除他们的cookies,你就会失去这些信息。

您可以使用类似canvas fingerprinting而不是使用uniqid来优化您的跟踪机制,但这里要实现的一点是,没有方法可以永久且正确地唯一标识用户,因为用户应该有权不跟踪。