Nous avons un site web qui utilise 2 bases de données différentes. La façon dont il est mis en place maintenant est que lorsque vous allez sur www.website.com et que vous vous connectez, une fois authentifié, vous aurez un cookie défini sur website1ConnectionString. Chaque fois que nous appelons un datacontext avec linq, nous envoyons des fonctionnalités pour vérifier le nom du cookie et saisir la chaîne de connexion correspondant. EX PortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString);
Si un utilisateur accède à www.website.com/2ndlogin, l'utilisateur est authentifié et un cookie est défini avec le cookie website2ConnectionString. Nous sommes confrontés à un problème en ce moment que le nom des utilisateurs et le guid changeront aléatoirement à un autre utilisateur, montrant ainsi les mauvaises informations.Nous avons un fantôme dans nos contrôles d'adhésion ASP.Net
Nous l'avons remarqué en écrivant le nom d'utilisateur associé à l'utilisateur connecté et en naviguant sur le site. Après une période d'inactivité, le nom d'utilisateur affiché en haut de chaque page change au hasard en un autre utilisateur, avec le GUID. Parfois, il change et parfois nous sommes obligés de se déconnecter et de se reconnecter.
Nous avons récemment constaté qu'un utilisateur sur base de données1 avait changé son nom d'utilisateur et son GUID pour un utilisateur sur Database2.
Nous utilisons une classe AuthenticatedUser qui ressemble à ce qui suit:
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);
}
}
je stocke le nom de chaîne de connexion que vous avez mentionné, pas la chaîne de connexion dans le code ... – EvanGWatkins
Ok, je Je vais corriger ma réponse. – Greg