С# Cookie не сохраняет свою информацию

Scenerio - я пишу веб-приложение, которое на основе того, какое поле входа вы используете (база данных1 и база данных2), оно подключит вас к соответствующей базе данных. Я установил в файле web.config обе строки подключения. В методе On_Authenticate каждого поля я проверяю подлинность пользователя, а затем отправляю строку на основе поля входа в общедоступную переменную в классе с именем Authenticate user. Эта общедоступная переменная проверяет файл cookie и получает имя строки подключения из переменной. Если файл cookie имеет значение null, он устанавливает новый файл cookie, срок действия всех существующих файлов cookie истекает и устанавливает значения файлов cookie.

Теперь, когда это будет сделано, каждый раз, когда я обращаюсь к базе данных (используя LINQ2SQL), я создаю контекст данных и отправляю AuthenticatedUser.ConnectionString. Это проверит файл cookie и отправит строку подключения, которая будет использоваться для извлечения данных. Herer - это класс 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.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 = "";
    }
} 

}

Теперь это, кажется, работает при первом щелчке при входе в систему. Когда я ввожу информацию о пользователе и выполняю процесс, я вижу установленный файл cookie. Однако при первом истинном вызове базы данных, где я использую PortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString);, я получаю ошибку нулевой ссылки. Он проходит через Get, проверяет файл cookie и возвращает нулевой файл cookie. Что здесь может происходить?


person EvanGWatkins    schedule 29.09.2010    source источник


Ответы (1)


Вам необходимо добавить файл cookie в коллекцию Reponse.Cookies при его настройке вместо коллекции Request.Cookies. Только файлы cookie в ответе отправляются обратно в браузер пользователя.

person tvanfosson    schedule 29.09.2010
comment
Я обращаю внимание на имя строки подключения, а не на фактическую строку подключения. Я отправляю это имя в GetConnectionStringFromName(), чтобы получить саму строку подключения. - person EvanGWatkins; 29.09.2010
comment
@ Эван - извини, я пропустил это. Итак, все, что вам нужно сделать, это вместо этого сохранить файл cookie в ответе. - person tvanfosson; 29.09.2010
comment
Спасибо, я не могу поверить, что просмотрел это. Спасибо! - person EvanGWatkins; 29.09.2010