Как поток событий HttpApplication связан с членством и файлами cookie? - PullRequest
4 голосов
/ 09 января 2011

Я переопределил Application_AuthenticateRequest () в моем Global.asax, чтобы попытаться лучше понять поток событий.Я использую поставщика членства, который поставляется с приложением MVC2 по умолчанию.

Я подумал, если бы я сделал это:

    public void Application_AuthenticateRequest(object sender, EventArgs args)
    {
        HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie != null)
        {
            authCookie.Expires = System.DateTime.Now.AddDays(-1);  // Set the cookie expires time in order to delete it
            Response.Cookies.Add(authCookie);
        }
    }

Пользователь может войти в систему, но после загрузки страницы после того, как онпри отправке формы входа они будут отображаться как не вошедшие в систему, так как я уничтожил их файл cookie авторизации.

Однако это не так.Вместо этого они могут успешно войти в систему, и он покажет, что они вошли в систему при загрузке страницы.На следующей странице, которую они нажмут, они выйдут из системы.

Я думал, что вовремя не уничтожил их cookie, поэтому поместил этот код в Application_BeginRequest () внутри моего Global.asax.Это дало те же результаты.

Значит ли это, что я все еще не уничтожил их cookie во времени, или я не правильно понимаю поток событий?

Ответы [ 2 ]

1 голос
/ 09 января 2011

Здесь используются две коллекции файлов cookie; Запрос. Печенье и ответ. Печенье

Request.Cookies - это файлы cookie, которые пришли из браузера для текущей страницы. Большинство / все процессы читаются из этой коллекции.

Response.Cookies - это куки, которые будут отправлены обратно в браузер. Когда вы устанавливаете значение Expires для cookie-файла Response, он сначала должен вернуться в браузер, браузер видит, что срок его действия истек, и на следующей странице не будет cookie.

Вы можете попытаться установить Request.Cookies, но я считаю, что это только для чтения.

0 голосов
/ 09 января 2011

Использование FormsAuthentication.SignOut(); это предпочтительный способ выхода из аутентифицированного пользователя.

...