【问题标题】:Get unique session ID/key on server side在服务器端获取唯一的会话 ID/密钥
【发布时间】:2015-08-04 05:32:06
【问题描述】:

我几乎可以确定我要查找的内容存在,但我在 Microsoft 文档和此处都没有找到。

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

我已经看过了:

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

所以我所有的尝试都给了我一个每次或从不改变的 ID。有什么方法可以从会话中获取一些东西吗?

【问题讨论】:

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


    【解决方案1】:

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

    来自MSDN

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

    【讨论】:

      【解决方案2】:

      我建议使用 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

      【讨论】:

      • 我试过这个方法:当多台机器通过管理其IP地址的同一个VPN服务连接时会出现问题:它们具有相同的IP地址。
      猜你喜欢
      • 2016-07-29
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2012-09-14
      相关资源
      最近更新 更多