通过web请求从设备获取唯一的静态id



我有一个MVC应用程序,我想添加一些自定义的统计信息。对于一些统计信息,最好为设备提供一个唯一的标识符。

例如,如果我有一个RSS订阅者的唯一id,我可以监视RSS订阅者的活动数量。

我想知道是否有人知道网络请求中有什么可以用作IP以外的ID(显然可以更改)。比如设备ID之类的?

以下是一些需要考虑的方法。

HTTP标头

你可以查看一些HTTP标头,它们可以帮助你识别唯一的用户或设备——有些是指sim卡,有些是指设备。以下是我从Google Adsense Mobile用来帮助跟踪其广告的标题中得出的列表:

  • x-dcmguid
  • x-up-subno
  • x-jphone-uid
  • x-em-uid

这些可能是一些非常流行的标题,但会有更多的供应商/设备特定的标题很流行。你可以开始收集你的网站收到的所有标题,计算每个标题的数量,并开始建立自己的公共标题数据库。

其他一些方法

Cookie

Cookie可以在请求代理(例如浏览器)上设置,并在代理再次访问时返回。有关方法列表,请查看Ever Cookie-这是一种几乎永久的Cookie-它通过使用以下方法之一来工作,其中至少有一种方法可以工作:

 - Standard HTTP Cookies 
 - Local Shared Objects (Flash Cookies)
 - Silverlight Isolated Storage 
 - Storing cookies in RGB values of auto-generated, force-cached 
    PNGs using HTML5 Canvas tag to read pixels (cookies) back out
 - Storing cookies in Web History 
 - Storing cookies in HTTP ETags 
 - Storing cookies in Web cache 
 - window.name caching
 - Internet Explorer userData storage
 - HTML5 Session Storage 
 - HTML5 Local Storage 
 - HTML5 Global Storage 
 - HTML5 Database Storage via SQLite

组合

也可以想出自己的方案,例如,取user-agent标头,其他一些标头,如acceptx-fowarded-for和ip,从它们中生成一个唯一的哈希值,以更准确地确定代理的唯一性。

这里有许多不同的移动标头。我还点击了我的一个页面,并在这里存储了来自各种设备的移动标题,用于我自己的目的http://wap.defza.com/ua/ua.txt(还有ua1.txt、ua2.txt等)

简单的答案是他们没有(考虑到隐私问题,有充分的理由)。更有用的答案是,这是你通常会使用cookie做的事情。您设置了一个cookie,然后检查该cookie以识别发出请求的特定浏览器。

当然,这绝不是傻瓜式的,因为用户可以拒绝cookie,删除它们,并且可以使用许多不同的浏览器(每个浏览器都有不同的cookie)。如果你很狡猾(我不建议这样做),你可以使用本地共享对象(Flash Cookie),因为它不太可能被删除。不过,归根结底,如果有人不想被跟踪,你不能强迫他们被跟踪

不过,一般来说,如果你想要分析和跟踪,那么可以考虑使用谷歌分析等第三方解决方案。这将为您提供关于访问者及其浏览习惯的非常详细的数据(尽管仍然依赖cookie和javascript)。

除了IP

如果你的网站不需要任何身份验证来提供这些内容,那么IP地址是你唯一可以用来识别客户端的东西,即使这样也可能不是唯一的,例如,你可以在同一个代理后面有两个客户端=>在这种情况下,无法区分这些请求。另一种可能性是使用cookie,但这属于第一类=>身份验证。

浏览器没有提供标识符,出于隐私考虑,任何供应商都不太可能实现这一点,至少现在是这样。

你唯一的选择就是某种形式的饼干。

对于RSS提要,可以想象,每次呈现时都会在提要URL中嵌入一个随机的唯一ID,这样你就可以知道检索该URL的人何时下载了你的提要。然而,如果用户与其他人共享该URL,你将无法真正知道。

最新更新