1

Wir haben eine Website eingerichtet, die 2 verschiedene Datenbanken verwendet. So wie es jetzt eingerichtet ist, dass wenn du auf www.website.com gehst und dich anmeldet, sobald du authentifiziert bist, wirst du ein Cookie haben, das auf website1ConnectionString gesetzt ist. Jedes Mal, wenn wir einen Datenkontext mit linq aufrufen, senden wir eine Funktion ein, um den Cookie-Namen zu prüfen und die entsprechende Verbindungszeichenfolge abzurufen. EX PortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString); Wenn ein Benutzer zu www.website.com/2ndlogin geht, wird der Benutzer authentifiziert und ein Cookie wird mit dem Cookie website2ConnectionString gesetzt. Wir stoßen jetzt auf ein Problem, bei dem zufällig der Name und die Guid des Benutzers zu einem anderen Benutzer wechseln und somit die falschen Informationen anzeigen.Wir haben einen Geist in unserer ASP.Net-Mitgliedschaft steuert

Wir haben dies festgestellt, indem wir den Benutzernamen, der dem angemeldeten Benutzer zugeordnet ist und die Website durchsucht, geschrieben haben. Nach einer gewissen Inaktivität wechselt der Benutzername, der oben auf jeder Seite angezeigt wird, zufällig zu einem anderen Benutzer, zusammen mit der GUID. Manchmal ändert es sich wieder und manchmal müssen wir uns abmelden und wieder anmelden.

Wir hatten es vor kurzem geschehen, dass ein Benutzer auf Datenbank1 seinen Benutzernamen und seine GUID zu einem Benutzer auf Database2 geändert hat.

wir eine AuthenticatedUser Klasse verwenden, die wie folgt aussieht:

public static MembershipUser GetUser() 
    { 
     string connection = AuthenticatedUser.ConnectionString; 
     string provider = ""; 
     if (connection.Contains("website2")) 
     { 
      provider = "website2MembershipProvider"; 
     } 
     else 
     { 
      provider = "AspNetSqlMembershipProvider"; 
     } 

     MembershipProvider prov = Membership.Providers[provider]; 
     MembershipUser m = prov.GetUser(UserName, true); 

     return m; 
    } 

    public static MembershipProvider GetMembershipProvider() 
    { 
     string connection = AuthenticatedUser.ConnectionString; 
     string provider = ""; 
     if (connection.Contains("website2")) 
     { 
      provider = "website2MembershipProvider"; 
     } 
     else 
     { 
      provider = "AspNetSqlMembershipProvider"; 
     } 

     MembershipProvider prov = Membership.Providers[provider]; 
     return prov; 
    } 

    public static Guid LoginUserID 
    { 
     get 
     { 
      Guid g = new Guid(); 

      string connection = AuthenticatedUser.ConnectionString; 
      string provider = ""; 
      if (connection.Contains("website2")) 
      { 
       provider = "website2MembershipProvider"; 
      } 
      else 
      { 
       provider = "AspNetSqlMembershipProvider"; 
      } 

      MembershipProvider prov = Membership.Providers[provider]; 
      MembershipUser m = prov.GetUser(UserName, true); 
      if (m != null) 
      { 
       g = (Guid)m.ProviderUserKey; 
      } 

      return g; 
     } 
    } 

    private static string _UserName = ""; 
    public static string UserName 
    { 
     get 
     { 
      if (String.IsNullOrEmpty(_UserName)) 
      { 
       if (Membership.GetUser() != null) 
       { 
        return Membership.GetUser().UserName; 
       } 
      } 
      else 
      { 
       return _UserName; 
      } 

      return ""; 
     } 

     set 
     { 
      _UserName = value; 
     } 
    } 

public static string ConnectionString 
    { 
     get 
     { 
      HttpCookie myCookie = HttpContext.Current.Request.Cookies["connectionString"]; 
      return GetConnectionStringFromName(myCookie); 
     } 
     set 
     { 
      if (HttpContext.Current.Request.Cookies["connectionString"] != null) 
      { 
       ExpireCookies(HttpContext.Current); 
      } 
      var allCookies = HttpContext.Current.Request.Cookies.AllKeys; 
      HttpCookie cookie = new HttpCookie("connectionString"); 
      cookie.Value = value; 
      cookie.Expires = DateTime.Now.AddYears(100); 
      HttpContext.Current.Response.Cookies.Add(cookie); 
     } 
    } 

Antwort

0

Ihre Username-Eigenschaft nicht den ausgewählten Anbieter verwendet, braucht es immer die Standardanbieter. Wie verwenden Sie UserName? Wann setzen Sie außerdem m.ProviderUserKey auf die GUID?


btw, können Sie einen Teil der doppelten Code Refactoring aus:

public static MembershipUser GetUser() 
{ 
    return GetMembershipProvider().GetUser(UserName, true); 
} 

public static MembershipProvider GetMembershipProvider() 
{ 
    string connection = AuthenticatedUser.ConnectionString; 
    string provider; 
    if (connection.Contains("website2")) 
    { 
     provider = "website2MembershipProvider"; 
    } 
    else 
    { 
     provider = "AspNetSqlMembershipProvider"; 
    } 

    return Membership.Providers[provider]; 
} 

public static Guid LoginUserID 
{ 
    get 
    { 
     Guid g = new Guid(); 

     MembershipUser m = GetUser(); 
     if (m != null) 
     { 
      g = (Guid)m.ProviderUserKey; 
     } 

     return g; 
    } 
} 
+0

Ich bin die Verbindungszeichennamen zu speichern, wie Sie erwähnt haben, nicht die Verbindungszeichenfolge in dem Code ... – EvanGWatkins

+0

Ok, ich werde meine Antwort korrigieren. – Greg

Verwandte Themen