从移动设备获取唯一的识别号码是否可能?

34

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

这样做的目的是为了存储此编号以识别已经访问过该网站的人。

我之前处理了很多蓝牙相关的工作,当你检测到一个设备时,有一种可以存储MAC地址的方法,我将其用作ID号码。所以我的问题是,是否可以从浏览器中检测到通用的ID号码…?

谢谢。


1
我不希望通过浏览器的一个单一ID就能被识别出来,这样我就会被无处不在地追踪。因为浏览器设计者也知道这一点,所以我想你必须留下一个cookie。 - MvanGeest
4
如果你认为你的手机不是一个可以让人们无处不在地跟踪你的工具,那么你就是在欺骗自己。在我的情况下,我并不打算出于恶意来“追踪”别人,我只是希望用户不必再次加载介绍页面等内容。Cookie 可以起作用,但如果被禁用或设备不支持呢? - Pierre
6个回答

39
经过进一步研究,答案是:目前无法从移动设备的浏览器中获取设备ID号码...
我发现的一个解决方案是生成一个“唯一”的数字(在我的情况下,我使用了PHP,所以我使用了session_id()和rand()函数生成的数字相结合,最终得到一个相当大的数字,很难重复出现...),然后将其存储在永不过期的cookie中。
这不是完美的解决方案,因为如果禁用cookie或用户清除cookie,则无法使用它。但实际上,在使用它一段时间后,它表现得非常好,移动设备通常启用cookie,并且用户似乎不经常清除它们...
另外(取决于您的应用程序),如果您存储电子邮件或用户名,然后将其与此“唯一”数字关联到数据库中,您甚至可以通过再次询问他的用户名或电子邮件来恢复某人的身份并存储新的cookie...
希望这会对某些人有所帮助!

感谢这个解决方法。如果用户在同一设备上使用不同的浏览器会怎样? - Ankur Raiyani

4

1
这个想法很好,但是并非所有浏览器都支持HSTS超级Cookie,所以它仍然不是一个完整的解决方案...虽然我觉得这些超级Cookie很可怕 :) - Pierre
使用HSTS识别设备的能力是该功能的意外副作用。我不建议在任何生产系统中使用它。 - Sam Greenhalgh

2

这是一个旧问题。希望能对未来的某个人有所帮助。

虽然"Experimental",但MDN Web Docs现在有一种可以获取设备ID的方法。目前所有浏览器都支持,除了IE。这个解决方案似乎比没有好-因为ID不可靠,我不得不用一些自定义的解决方法来填补空缺。

MediaDeviceInfo接口的deviceId只读属性返回一个DOMString,它是所代表设备的标识符,并在会话之间保留。它无法被其他应用程序猜测,并且对调用应用程序的来源唯一。当用户清除cookies时,它会重置。对于私密浏览,使用不会在会话之间保留的不同标识符。

var deviceID = MediaDeviceInfo.deviceId

1
这只适用于连接的媒体设备,比如耳机,而不是那些访问网站的人,对吗? - Han Moe Htet

2

我知道这个问题很旧了,但我找到了它,并想分享一下我的想法,关于使用GUID类型数字的最佳替代方案。

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

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

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

虽然你提到了这一点,这是真的,但重要的是要注意,任何输入虚假数据的人,例如anon@anon.com,很可能会被加载另一个用户的历史记录。例如,在你的情况下,一个全新的用户输入anon@anon.com将无法看到介绍页面。


0
在一些国家,当消费者通过WAP网关浏览时,运营商会在http头中包含一些ID。有一些带有API的聚合器可用于消费者身份识别,通常仅在消费者通过WAP网关浏览时才起作用。

好的,谢谢您提供的信息,但是随着越来越多的新设备使用3G连接,我想这并没有什么帮助... - Pierre

0
我正在做类似的事情,但是针对本地 HTML 页面来存储 ID 并最终更新到服务器: - 获取时代毫秒数 - 然后用随机数替换前导数字(愚蠢的希望限制数字大小) 不知何故,我认为移动设备更容易准时。

这真的有关吗?我不太明白你在说什么! - Pierre
我重新阅读了您最初的问题,当时我正在解决我的问题,这个问题实际上更为有限:单个用户在不同设备上。所以从您的角度来看,您可能是正确的。抱歉。 - leDamien

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接