ОБНОВЛЕНИЕ: я смог воспроизвести это в нашей производственной среде.Несмотря на установку даты истечения срока действия для этих файлов cookie равной -1 минуте (см. Код ниже), они надежно отображаются в браузере с истекшим сроком действия в десять минут.Теперь у меня есть один пользователь, сообщающий о поведении в IE11, но я все еще могу воспроизводить только в Chrome.Я протестировал Firefox и Safari без проблем.Изменилось ли в последнем обновлении Chrome способ обработки файлов cookie?
В соответствии с обновлением у меня теперь есть снимки экрана с ситуацией с файлами cookie.Вот где они привязываются.Обратите внимание на дату и время;звонок был сделан около 18: 09 по Гринвичу, поэтому даты истечения срока 18:07:57 верны.Ожидаемое поведение для этих файлов cookie истекает и исчезает автоматически.
Вместо этого файлы cookie прикрепляются к ряду последующих вызовов.Вот пример.Покрытое печенье наверху не имеет отношения.
Наконец, когда я проверяю файлы cookie в инструментах F12, я вижу дату истечения срока действия, не связанную с установленным сервером - примерно в 00:11:40 позже?Эти куки не были обновлены на сервере;с одной стороны, не было ни одного звонка, чтобы сделать это, ни звонка, который включал новые куки в своем ответе.С другой стороны, при обновлении эти куки-файлы будут возвращены как безопасные, а это не так.Итак, все, что я могу сделать вывод, это то, что Chrome неправильно обрабатывает дату истечения срока действия, которую устанавливает сервер.
Исходное сообщение
В моем приложении есть вызов API, который является частью рабочего процесса выхода пользователя из системы.Этот вызов возвращает ответ с пустыми версиями трех файлов cookie, в которых хранится различная информация для вошедшего в систему пользователя, с указанием даты окончания срока действия, установленной на минуту раньше.Намерение здесь состоит в том, чтобы заменить куки с просроченными, таким образом удаляя куки.
Это работало хорошо в течение нескольких лет, но недавно у меня были жалобы от пользователей Chrome, что у них проблемы с аутентификацией.Короче говоря, по-видимому, происходит то, что когда пользователь выходит из системы, в Chrome на самом деле прикрепляются файлы cookie с заранее просроченным выходом, что заставляет систему думать, что пользователь все еще вошел в систему.
Это возможночтобы этот блок кода вызывался, когда пользователь еще не вошел в систему, особенно до того, как он будет перенаправлен на страницу входа.Идея заключается в том, чтобы убедиться, что все три куки очищены, прежде чем мы сделаем новый логин.Этот специфический поток - то, где проблема, кажется, возникает.В прошлом этот звонок был безвредным - браузер возвращает некоторые просроченные куки и ничего не происходит.Однако теперь файлы cookie с истекшим сроком действия присоединяются, что означает, что пользователь запустил файл без файлов cookie и получил все три (с пустыми значениями).
Проблема устраняется путем удаления файлов cookie вручную или с помощью другого браузера.,Я не менял эту функциональность в веках.Я также не могу воспроизвести это локально, как и моя команда QA.Поэтому я подозреваю, что это как-то связано с недавним обновлением Chrome, возможно, тем, которое получили некоторые из наших конечных пользователей, а я нет (или, может быть, наоборот: у меня есть более новая версия, в которой исправлена некоторая связанная ошибка).
Вот мой код с небольшим количеством скрытых имен.
А вот скриншот от конечного пользователя, показывающий, что эти три файла cookie были прикреплены к ее браузеру Chrome.Верхняя строка закрыта, потому что это не имеет значения;домены покрыты, потому что они чувствительны, но они верны.Первые два файла cookie - HttpOnly, и ни один из них не является безопасным.
Исходя из того, когда конечный пользователь прислал мне этот снимок экрана, я бы предположил, что время истечения может быть через десять минут после того, как файл cookie был прикреплен - я неТочно знаю, но я получил письмо от нее до истечения срока действия.Таким образом, время истечения было установлено, чтобы быть где-то в будущем, а не 1 минуту в прошлом, как предполагалось в моем коде.
Можно предположить, что вычитания только 1 минуты уже недостаточно для надежного запуска предварительного истечения срока действия cookie.Я намерен изменить это на .AddDays (-1).Другое предположение состоит в том, что по какой-то причине получение файлов cookie с истекшим сроком действия, которые не заменяют хорошие (поскольку пользователь фактически не выполнил вход в систему при совершении этого вызова, см. Выше), вводит браузер в заблуждение относительно хранения файлов с истекшим сроком действия.Мое третье предположение, что это как-то связано с безопасными куки;наша производственная среда - HTTPS, а dev и QA - нет.Обратите внимание, что эти куки не являются безопасными, потому что они просто предназначены для истечения срока действия, но настоящие куки, которые они обычно заменяют, являются безопасными.
Однако я не совсем уверен в этих идеях, и так как я могуне проверяйте локально, не можете быть уверенным.Я хотел бы получить больше информации о возможных исправлениях перед отправкой чего-либо в производство.
Большое спасибо за вашу помощь!
Язык: C #
Framework: ASP.NET 4.5.2
Примечание. Я использую класс .NET ApiController из System.Web.Http для этого действия, поэтому нет сеанса или состояния (я НЕ использую класс Controller из System.Web.Mvc).