是否可以从移动设备获取唯一标识号?

Posted

技术标签:

【中文标题】是否可以从移动设备获取唯一标识号?【英文标题】:is it possible to get a unique identification number from a mobile device? 【发布时间】:2010-07-28 10:22:27 【问题描述】:

我目前正在开发移动设备 Web 应用程序,我想知道每个设备是否有某种可以通过浏览器检测到的唯一 ID 号。

目的是存储此号码,以便识别已经访问过该网站的人。

我经常使用蓝牙,当您检测到设备时,您可以存储某种 MAC 地址,我将其用作 ID 号,所以这是我的问题,是否有一个通用 ID 号我可以从浏览器检测...?

谢谢。

【问题讨论】:

如果我可以通过浏览器从一个 ID 中识别出来,我会讨厌它。我到处都可以被追踪。因为浏览器设计者也知道这一点,我想你必须留下一个 cookie。 大声笑,如果您认为您的手机还不是一个允许人们在任何地方跟踪您的工具,那么您就是在自欺欺人……就我而言,我不打算出于不良目的“跟踪”人们,我只是希望用户不必再次加载介绍页面等... Cookie 可以工作,但如果它们被禁用或设备不支持它怎么办... 【参考方案1】:

经过进一步研究,答案是:不,目前无法从浏览器中获取移动设备 ID 号...

我发现的一个解决方案是生成一个“唯一”数字(在我的情况下,我使用 php,所以我使用 session_id() 数字与 rand() 函数生成的数字混合,它最终是一个相当几乎不会出现两次的大数字...),然后将其存储在永不过期的 cookie 中。

这不是一个完美的解决方案,因为如果禁用 cookie 或用户清除了他的 cookie,它将无法工作,但实际上在使用了一段时间后,事实证明它工作得很好,移动设备大多有 cookie启用,用户似乎不经常清除它们...

此外(取决于您的应用程序)如果您存储电子邮件或用户名,然后将其与此“唯一”号码关联到数据库中,您甚至可以通过询问他的用户名或电子邮件来恢复某人的身份并存储新的 cookie又...

希望这会帮助一些人!

【讨论】:

感谢您的解决方法。如果用户在同一设备上使用不同的浏览器怎么办?【参考方案2】:

Sam Greenhalgh 刚刚找到了一种通过“Super Cookie”设置设备 ID 的方法:

http://www.radicalresearch.co.uk/lab/hstssupercookies(存档链接)

【讨论】:

它背后的想法很好,但是所有浏览器都不支持hsts超级cookie,所以它仍然不是一个完整的解决方案......虽然我觉得这些超级cookie很奇怪:) 使用 HSTS 识别设备的能力是该功能的意外副作用。我不会推荐它用于任何类型的生产系统。【参考方案3】:

这是一个老问题。希望这对将来的人有所帮助。

虽然是“实验性的”,MDN Web Docs 现在有了获取设备 ID 的方法。目前支持除 IE 外的所有浏览器。这个解决方案似乎总比没有好 - 因为 ID 不可靠,我必须使用一些自定义解决方法来填补空白。

MediaDeviceInfo 接口的 deviceId 只读属性 返回一个 DOMString,它是表示设备的标识符 并在会话中持续存在。别人猜不到的 应用程序,并且对于调用应用程序的来源是唯一的。它 当用户清除 cookie 时重置。对于私人浏览,一个 使用了不同的标识符,不会跨会话持久化。

var deviceID = MediaDeviceInfo.deviceId

【讨论】:

【参考方案4】:

我知道这是旧的 - 但我发现了这个并想分享我对使用 GUID 类型数字的 OP 的下一个最好的东西的想法。

除非你需要一个巨大的不可猜测标识符的安全性——服务器创建一个简单的计数器更有意义——例如从 ~100 开始,并且对于每个还没有你的 cookie 的访问者使用 max( counter) + 1 来创建他们的新 cookie。

现在您有了一个非常短且 100% 唯一的标识符,您可以为客户端和服务器存储它。

此外,正如您提到的存储电子邮件地址也很有用,理论上电子邮件地址应该是唯一的 - 不仅如此 - 它是跨浏览器兼容的。即他们的 cookie 存在于一个浏览器上 - 但在使用新浏览器时,如果他们输入相同的电子邮件地址,您可以映射到他们的原始连接配置文件。

尽管您提到了这一点,而且它是真的,但同样重要的是要注意任何人输入不可靠的数据,例如anon@anon.com 可能会加载其他用户历史记录。即在您的情况下 - 输入 anon@anon.com 的全新用户将无法看到介绍页面。

【讨论】:

【参考方案5】:

在某些国家/地区,当消费者通过 WAP 网关浏览时,运营商会在 http 标头中包含一些 id。有一些聚合器带有用于消费者识别的 API,通常它仅在消费者也通过 WAP 网关浏览时才起作用。

【讨论】:

好的,谢谢你的信息,但是所有新设备都在 3g 连接上运行,我想这没有帮助......【参考方案6】:

我正在做类似的事情,但用于在本地存储中存储 id 并最终更新到服务器的 html 本地页面: - 以纪元毫秒计算日期 - 然后用随机数替换前导数(愚蠢的希望限制数字的大小) 不知何故,我认为移动设备更有可能准时。

【讨论】:

这真的相关吗?我真的不明白你在说什么! 我重新阅读了您在处理我的问题时浏览的原始问题,这确实更有限:不同设备上的单个用户。所以从你的角度来看,你可能是对的。对不起。

以上是关于是否可以从移动设备获取唯一标识号?的主要内容,如果未能解决你的问题,请参考以下文章

iOS获取设备唯一标识的8种方法

获取安卓设备唯一标识,看着一篇就够了

移动端设备标识码-DeviceID、IMEI、IDFA、UDID

移动设备(手机)的唯一ID有哪些

移动设备(手机)的唯一ID有哪些

Android 设备唯一标识