У нас есть настроенный веб-сайт, который использует 2 разные базы данных.Они настроены так, что теперь, когда вы заходите на сайт www.website.com и входите в систему, после аутентификации у вас будет файл cookie, для которого настроено значение website1ConnectionString.Каждый раз, когда мы вызываем текстовый текст с помощью linq, мы отправляем функциональность, чтобы проверить имя файла cookie и получить соответствующую строку подключения.Пример PortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString);
Если пользователь заходит на сайт www.website.com/2ndlogin, он проходит проверку подлинности, и файл cookie устанавливается вместе с файлом website2ConnectionString.Сейчас мы сталкиваемся с проблемой, которая заключается в том, что имя пользователя и guid случайно меняются на других пользователей, что приводит к неверной информации.
Мы заметили это, выписав имя пользователя, связанное с вошедшим в систему пользователем.и навигация по сайту.После некоторого бездействия случайным образом имя пользователя, отображаемое в верхней части каждой страницы, меняется на другого пользователя вместе с GUID.Иногда все меняется обратно, а иногда мы вынуждены выходить из системы и снова входить в нее.
В последнее время случалось так, что у пользователя в database1 было изменено имя пользователя и GUID на пользователя в Database2.
Мы используем класс AuthenticatedUser, который выглядит следующим образом:
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);
}
}