set-cookie, похоже, игнорируется Chrome, но не IE?Странный вопрос истечения срока действия?302 редирект?Хорошо, боже, вы все - PullRequest
5 голосов
/ 29 октября 2011

Я устанавливаю cookie с датой истечения срока действия через ASP.NET, используя код, подобный этому

System.Web.Security.FormsAuthenticationTicket ticket = new System.Web.Security.FormsAuthenticationTicket(1, uname, DateTime.UtcNow, DateTime.UtcNow.AddDays(30), bool_persist, "some custom string data here");

string encrypted_ticket = System.Web.Security.FormsAuthentication.Encrypt(ticket);

HttpCookie auth_cookie = new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName, encrypted_ticket);
auth_cookie.HttpOnly = true;

if (persist) //passed in to method as parameter
{
     auth_cookie.Expires = DateTime.UtcNow.AddDays(30);
}
auth_cookie.Domain = ".mydomainname.com";
Response.Cookies.Set(auth_cookie);

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

Следующий заголовок получен в ответе

HTTP/1.1 302 Found
Location: /redirect_to_this_page
Set-Cookie:.myAuthCookie=TRUNCATED_ENCRYPTED_DATA_FOR_READABILITY; domain=.mydomainname.com; expires=Sun, 27-Nov-2011 20:27:16 GMT; path=/; HttpOnly
Set-Cookie:__MyOtherCookie=; domain=full.mydomainname.com; expires=Thu, 28-Oct-2010 20:27:24 GMT; path=/; HttpOnly

На запрос для /redirect_to_this_page я не вижу заголовка, отправляемого по какой-либо причине.

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:__utma=113888769.1619895090.1322774580.1322774580.1322774580.1;     __utmb=113888769.5.8.1322774827282; __utmc=113888769;     __utmz=113888769.1319833259.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=
Host:full.mydomainname.com
Referer:http://full.mydomainname.com/referring_page_that_set_cookies
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko)         Chrome/15.0.874.106 Safari/535.2

Есть идеи, как решить эту проблему?__MyOtherCookie устанавливается на каждый запрос.

Спасибо
Мустафа


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

Некоторые открытия: IE9 работает правильно.Chrome не устанавливает cookie после получения заголовка Set-Cookie, если срок его действия истек.

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

По словам Джона Стюарта .... Вааа?

Ответы [ 5 ]

3 голосов
/ 09 апреля 2016

У нас были те же симптомы.Оказалось, что IIS возвращал браузеру неверную дату в заголовке HTTP-даты, хотя на сервере были правильно установлены дата и время.IISRESET не помогло, потребовалась полная перезагрузка сервера, чтобы исправить это.

Обновление: или используйте этот метод для сброса даты: https://serverfault.com/a/217348

3 голосов
/ 08 октября 2012

У нас были похожие симптомы при переносе нашего кода с одного сервера на другой.Наш логин установил бы истекающий cookie на перенаправлении, когда вход был успешным.На новом сервере Firefox работал нормально, но Chrome и Safari не работали (я не пробовал IE).Все работало на старом сервере.После сравнения заголовков / ответов двух случаев я обнаружил, что время сервера на новом сервере было установлено так, что время, указанное в истечении срока действия cookie, уже прошло, когда был установлен cookie!

Мы обслуживали устаревшие файлы cookie.

Правильно установив время на новом сервере, он заработал.

Предположение: FF работает, потому что сравнивает метку времени истечения с датой заголовка ответа Date: value - два других должны использовать локальныйвремя ОС машины?

3 голосов
/ 07 сентября 2012

У нас была такая же проблема с Chrome (версия 21.0.1180).Несмотря на то, что мы видим дату истечения срока действия заголовка, некоторые Chrome в Windows XP игнорировали его.Затем мы удалили дату истечения срока действия и Chrome принял решение сохранить файл cookie сеанса без проблем.

1 голос
/ 29 октября 2011

Удалите домен из своего файла cookie и попробуйте снова.

Если вы хотите использовать cookie во всех поддоменах, доменное имя в cookie должно совпадать с доменом с точкой в ​​начале, если смотреть на ваши заголовки, то оно не совпадает:

Ответ сервера имеет:

full.mydomainname.com

запрос имеет:

full.mydomain.com

Или, может быть, это как-то связано с этой ошибкой сафари Safari не устанавливает Cookie, но IE / FF делает

0 голосов
/ 07 ноября 2011

Почему вы используете точку в качестве префикса имени файла cookie для ".myAuthCookie"?Согласно RFC он рассматривается как разделитель .

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