C# 区分独特的设备连接

C# 区分独特的设备连接,c#,javascript,jquery,asp.net,C#,Javascript,Jquery,Asp.net,我正在运行QR清道夫搜索,用户将注册第一个扫描页面,然后查找其他QR代码。我想根据他们正在使用的设备(我将在注册期间将其作为密钥保存到云数据库(Azure))自动识别返回的人(进一步扫描二维码) 如何唯一地识别设备?我熟悉根据IP地址和/或名称识别设备,但只知道如何在单个域上进行识别,如下所示: //Get Client Machine name to restrict login string[] computer_name = System.Net.Dns.GetHostEntry(Requ

我正在运行QR清道夫搜索,用户将注册第一个扫描页面,然后查找其他QR代码。我想根据他们正在使用的设备(我将在注册期间将其作为密钥保存到云数据库(Azure))自动识别返回的人(进一步扫描二维码)

如何唯一地识别设备?我熟悉根据IP地址和/或名称识别设备,但只知道如何在单个域上进行识别,如下所示:

//Get Client Machine name to restrict login
string[] computer_name = System.Net.Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' });
string ecn = System.Environment.MachineName;
string strClientName = computer_name[0].ToString();
然后比较strClientName(它在我们的域中是唯一的)

考虑到客户端可以从任何网络、域等进行连接,什么是实现这一点的好方法?我曾考虑过使用MAC地址之类的东西,但我不认为这是一个好方法,也不确定它是否总是唯一的。从技术上讲,我不在乎这是否100%准确(因为团队可能不会超过100人),但我希望最终能扩大规模


我更喜欢在Page#Load上运行C#解决方案,但也可以实现javascript或jQuery解决方案。我希望大部分用户会在iPhone和Droid上使用任意种类的随机QR应用程序,以及一些win手机。QR码会将他们指向运行我的.NET项目的网址。

此答案假设以下过程。用户启动二维码扫描应用程序(可能在手机或平板电脑上,但不管是哪种设备)。他们扫描二维码,然后二维码应用程序将该URL加载到本地设备的浏览器中。每个二维码都指向同一域(不同的URL,但都位于同一域)

在这个世界上,您可以使用cookie来唯一地标识每个设备。当您第一次看到来自没有特定cookie关联的任何设备的点击时,您的服务器可以生成一个唯一cookie,并将其与web请求一起返回。如果您给cookie一个路径
'/'
,则该设备的所有未来QR点击都将重新发送urn相同的cookie,以便它可以作为您的设备标识符。这种类型的标识符将标识浏览器,并且与设备移动到不同位置或网络时的任何网络更改无关

创造唯一cookie值的一个简单方法是从时间戳和随机数组合创建一个字符串


通过清除设备上的cookie,可以随时重新初始化设备,或者您可以制作一个网页,其中提供一个按钮来为他们清除特定的cookie。

假设设备使用浏览器与服务器联系,为什么不在他们的第一次连接中创建一个唯一的cookie,并使用该cookie来识别它来自哪个设备等等。例如,如果你没有登录,网站就是这样让你创建购物车的。如果不存在,你可以在客户端或服务器上创建cookie。@jfriend00你知道这在QR扫描应用程序中是否有效吗?我今天晚些时候会告诉你。不,你没有说你正在使用什么特定的应用程序或工作原理。我的评论是假设您使用的是浏览器技术。如果您仅限于特定的非浏览器应用程序,那么您必须披露该应用程序,并可能对其工作原理及其功能进行一些研究。否则我们如何知道如何在这里提供帮助?对不起,我是说人们将进行扫描来暗示这一点的二维码,但还有其他方法。我会更新我的问题,谢谢!谢谢,这很好!如果其他人遇到此问题,我会使用HttpCookie cookie=Request.Cookies.Get(“CookieName”);如果为空,我会使用cookie=new HttpCookie(“CookieName”)创建cookie,然后给cookie一个值和过期日期,然后将其与响应一起返回。否则,我会从cookie中获取值。@Jem-很高兴它能工作。请确保将cookie路径设置为
“/”
,以便您可以从站点上的任何位置访问cookie。这似乎是默认路径(当我深入查看cookie设置时),所以它工作得很好!现在我只需要设置我的DB连接字符串。在连接Azure(第一次)时遇到一些问题。我最终会得到它:)