在服务器端

时间:2015-05-22 09:02:18

标签: c# asp.net client-server clientid

我几乎可以肯定我正在寻找的是什么,但我没有找到Microsoft文档,也没有在这里找到。

我只想从服务器端的ASP.NET 4.5中的客户端获取一个唯一的ID(字符串或数字,我并不介意)。我希望这个ID链接到一个会话,对于每个连接到我的服务器的系统(如多个计算机或具有不同浏览器的同一个客户端)都是不同的,但如果用户在我的服务器上的同一个浏览器上打开多个选项卡,则相同。 / p>

我已经看过了:

  • System.Web.UI.Page.ClientID:这是控件的名称(所以总是“__Page”)。
  • System.Web.UI.Page.UniqueID:它返回相同的内容。
  • Session.LCID:我不确定它是指什么,但如果我用不同的浏览器连接到我的服务器,它就是一样的。
  • Session.SessionID:每次刷新页面或在新标签页中打开它时都会更改。
  • Request.AnonymousID:无效。

所以我的所有尝试都给了我一个每次或永远都不会改变的ID。有没有办法从会话中得到一些东西?

2 个答案:

答案 0 :(得分:1)

您所寻找的实际上是Session.SessionID,但它有一个警告。

来自MSDN

  

使用基于cookie的会话状态时,在使用Session对象之前,ASP.NET不会为会话数据分配存储空间。结果,为每个页面请求生成新的会话ID,直到访问会话对象。如果您的应用程序需要整个会话的静态会话ID,您可以在应用程序的Global.asax文件中实现Session_Start方法,并将数据存储在Session对象中以修复会话ID,或者您可以在您的另一部分使用代码应用程序在Session对象中显式存储数据。

答案 1 :(得分:0)

我建议使用ServerVariables集合中的REMOTE_ADDR / REMOTE_HOST值。即使用户使用多个浏览器并使用来自同一台计算机的不同会话,这些值也会具有相同的值。请注意,REMOTE_HOST可能并不总是具有值。 参考文献: https://msdn.microsoft.com/en-us/library/system.web.httprequest.servervariables(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx