Почему cookie .ASPAUX не проверяется FormsAuthentication? - PullRequest
1 голос
/ 17 октября 2010

У меня есть сайт, который использует FormsAuthentication, и да, имя cookie .ASPAUX:)

Я могу войти в систему отлично.Сервер создает билет для проверки подлинности с помощью форм, упаковывает его в файл cookie, правильно определяет срок действия (на 1 год вперед) и отправляет его клиенту.

По какой-то причине, через некоторое время, даже если файл cookie являетсятам еще (я вижу это с FireCookies) HttpContext.Current.Request.IsAuthenticated становится ложным на сервере.Как будто cookie не может быть проверен.

Проблема в том, почему это случилось?Как я могу отладить, почему cookie внезапно становится недействительным без истечения срока действия?

РЕДАКТИРОВАТЬ

Вот метод входа:

public static bool Login(int id)
        {
            try
            {
                string securityToken = UserHelper.AuthenticateUser(id);

                DateTime expiryDate = DateTime.Now.AddYears(1);
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                     1, id.ToString(), DateTime.Now, expiryDate, true,
                     securityToken, FormsAuthentication.FormsCookiePath);

                string encryptedTicket = FormsAuthentication.Encrypt(ticket);
                HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                cookie.Expires = expiryDate;

                HttpContext.Current.Response.Cookies.Add(cookie);

                return true;
            }
            catch
            {
                return false;
            }
        }

И Интернет.конфиг:

<authentication mode="Forms">
            <forms loginUrl="~/Login.aspx" timeout="2880" slidingExpiration="true"/>
        </authentication>

Ответы [ 2 ]

2 голосов
/ 17 октября 2010

Установить статические машинные ключи в вашем файле web.config, чтобы убедиться, что ключ шифрования, использованный при создании вашего билета, сохраняется после перезапуска пула приложений (или перезапуска вашего веб-сайта на веб-сервере ASP.NET)?

См. Также раздел «Билеты для проверки подлинности с помощью форм» в этой статье библиотеки MSDN

0 голосов
/ 17 октября 2010

Несколько вещей, о которых я могу подумать, чтобы проверить:

У вас есть несколько доменов (включая www.domain.com против domain.com)?

Если это так, либо задайте домен в файле cookie как domain.com, либо убедитесь, что вы всегда используете один и тот же домен

Вы используете HTTPS?

Если это так, убедитесь, что у вас всегда есть доступ к cookie через HTTPS или что для Secure установлено значение false на HttpCookie (в противном случае он доступен только для запросов HTTPS)

Вы пишете куки из виртуального каталога?

Если это так, возможно, указан «путь» в файле cookie, и он не будет доступен извне пути.

У вас есть несколько веб-серверов?

Если это так, убедитесь, что для вашей машинной клавиши установлено то же значение (хотя это должно вызывать исключение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...