У меня есть веб-приложение с кодовой базой, которое подключено к 2 базам данных.В зависимости от того, какой контроль входа пользователь использует для входа, к коду подключается другая база данных.Я делаю все это с помощью куки.Этот файл cookie находится в общедоступном классе с именем AuthenticatedUser.Класс выглядит следующим образом:
public class AuthenticatedUser : System.Web.UI.Page
{
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);
}
}
private static string GetConnectionStringFromName(HttpCookie myCookie)
{
try
{
string connectionStringName = myCookie.Value;
return ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
}
catch
{
FormsAuthentication.SignOut();
}
finally
{
HttpContext.Current.Response.Redirect("/default.aspx");
}
return "";
} private static void ExpireCookies(HttpContext current)
{
var allCookies = current.Request.Cookies.AllKeys;
foreach (var cook in allCookies.Select(c => current.Response.Cookies[c]).Where(cook => cook != null))
{
cook.Value = "";
cook.Expires = DateTime.Now.AddDays(-1);
current.Request.Cookies.Remove(cook.Name);
cook.Name = "";
}
}
}
Кажется, это работает на моей машине для разработки, но когда я пытался развернуть его, любой пользователь, который использовал опцию «запомнить меня» на сайте, получалошибка нулевой ссылки, поскольку они не использовали элемент управления для входа в систему для получения файла cookie.
Каков наилучший способ обойти это?Я думал, что если пользователь вошел в систему, но класс AuthenticatedUser не смог получить строку подключения для выхода из системы, чтобы заставить его снова использовать элемент управления для входа.Что мне делать?