2017-04-26 3 views
0

Ich untersuche das Speichern TempData an einem besseren Ort. Es gibt eine walkthrough for how to do that with MongoDB, aber der Schlüssel für die Speicherung (item.SessionIdentifier == controllerContext.HttpContext.Request.UserHostAddress, die IP-Adresse) funktioniert eindeutig nicht, da mehrere Benutzer/Sitzungen die gleiche öffentliche IP teilen können.Was ist der Schlüssel in einem benutzerdefinierten TempData-Anbieter?

Die Folge der Verwendung der IP als Schlüssel ist, dass mehrere Benutzer ihre jeweils anderen Daten sehen (und löschen). Insbesondere teilen sich alle Sitzungen und Browser-Instanzen während des Testens auf Ihrer Entwicklungsmaschine dieselben Temp-Daten.

Was wäre ein guter Schlüssel für TempData Speicher in einer Datenbank zu verwenden?

Antwort

0

Anstatt die Zuordnung direkt unter Methode aufrufen TempData wann immer

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

Mehrere Benutzer auf Objekt zuweisen kann eine IP-Adresse teilen. Zumindest verschiedene Browser auf dem gleichen Computer. – boot4life

+0

TempData ist sitzungsgebunden. Der jeweilige Benutzer sieht nur seine TempData. –

+0

TempData ist an das gebunden, was der Provider an sie bindet. Das MVC-System kann den Provider nicht dazu bringen, etwas Bestimmtes zu tun, und verlässt sich darauf, um die richtigen Daten für den richtigen Benutzer/die richtige Sitzung oder einen anderen Bereich zurückzugeben (in diesem Code die IP, nicht die Sitzung). – boot4life

Verwandte Themen