2017-04-26 86 views
0

我正在调查存储TempData在一个更好的地方。有一个walkthrough for how to do that with MongoDB,但用于存储的密钥(item.SessionIdentifier == controllerContext.HttpContext.Request.UserHostAddress,IP地址)显然不起作用,因为多个用户/会话可以共享相同的公共IP。什么用作自定义TempData提供程序中的键?

使用IP作为关键的结果是多个用户将看到(和删除)其他数据。特别是,在您的开发机器上进行测试期间,所有会话和浏览器实例将共享相同的临时数据。

什么是在某些数据库中使用TempData存储的好钥匙?

回答

0

不是指定直接TempData的拨打以下方法时曾经分配给对象

public static string GetVisitorIPAddress(bool GetLan = false) 
     { 
      string visitorIPAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

      if (String.IsNullOrEmpty(visitorIPAddress)) 
       visitorIPAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 

      if (string.IsNullOrEmpty(visitorIPAddress)) 
       visitorIPAddress = HttpContext.Current.Request.UserHostAddress; 

      if (string.IsNullOrEmpty(visitorIPAddress) || visitorIPAddress.Trim() == "::1") 
      { 
       GetLan = true; 
       visitorIPAddress = string.Empty; 
      } 

      if (GetLan && string.IsNullOrEmpty(visitorIPAddress)) 
      { 
       //This is for Local(LAN) Connected ID Address 
       string stringHostName = Dns.GetHostName(); 

       //Get Ip Host Entry 
       IPHostEntry ipHostEntries = Dns.GetHostEntry(stringHostName); 

       //Get Ip Address From The Ip Host Entry Address List 
       IPAddress[] arrIpAddress = ipHostEntries.AddressList; 

       try 
       { 
        visitorIPAddress = arrIpAddress[arrIpAddress.Length - 2].ToString(); 
       } 
       catch 
       { 
        try 
        { 
         visitorIPAddress = arrIpAddress[0].ToString(); 
        } 
        catch 
        { 
         try 
         { 
          arrIpAddress = Dns.GetHostAddresses(stringHostName); 
          visitorIPAddress = arrIpAddress[0].ToString(); 
         } 
         catch 
         { 
          visitorIPAddress = "127.0.0.1"; 
         } 
        } 
       } 
      } 

      return visitorIPAddress.Split(',')[0].Trim(); 
     } 
+0

多个用户可以共享一个IP地址。在同一台计算机上至少有不同的浏览器。 – boot4life

+0

TempData是会话绑定的。相应的用户将只能看到它的TempData。 –

+0

TempData绑定到提供者绑定到的地方。 MVC系统不能让提供者特别做任何事情,并依靠它来为正确的用户/会话或任何其他范围正在使用(在此代码中是IP,而不是会话)返回正确的数据。 – boot4life

相关问题