C # cookie не сохраняет свою информацию
-
26-09-2019 - |
Вопрос
SCENERIO - я пишущую веб-приложение, которое основано на каком окне входа в систему, которое вы используете (база данных1 и базы данных2), он подключит вас к коре соответствующей базы данных. Я установил Web.config для удержания обеих соединительных строк. На методе ON_AUTHENTICTICITAL каждого поле я проверяю аутентификацию пользователя, а затем отправить строку на основе окна входа в публичную переменную в классе, называемом аутентифицирующим пользователем. Эта публичная переменная проверяет для файла cookie и получает имя строки подключения из переменной, если файл cookie null, он устанавливает новое cookie, истекает все существующие файлы cookie и устанавливает значения cookie.
Теперь, когда это сделано, каждый раз, когда я ударил в базу данных (используя Linq2SQL), я создаю DataContext и отправку в аутентификацию. Это проверит файлы cookie и отправьте заставить строку подключения для использования данных. HERER - класс аутентификации ...
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.Request.Cookies.Add(cookie);
}
}
private static string GetConnectionStringFromName(HttpCookie myCookie)
{
string connectionStringName = myCookie.Value;
return ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
}
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 = "";
}
}
}
Теперь это, кажется, работает на первый клик от входа в систему. Когда я ввожу информацию о пользователе, и я выхожу через процесс, который я могу увидеть, которое установлено / однако, на первом имеющем вызове базы данных, где я использую PortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString);
Я получаю нулевую ссылочную ошибку. Он проходит через Get, и он проверяет cookie и возвращает нулевое cookie. Что может происходить здесь?
Решение
Вам нужно добавить cookie в коллекцию reponse.cookies при настройке его вместо запроса. Только печенье в ответе отправляется обратно в браузер пользователя.