Safari не устанавливает Cookie, но IE / FF делает - PullRequest
43 голосов
/ 17 июля 2009

Я обнаружил странную проблему с печеньем в сафари. Если вы перешли на http://2much.ch, вы можете войти с помощью FF / IE и путешествовать по сайту.

Но если вы используете сафари, вы можете войти только один раз; Вы не можете путешествовать по сайту. Я обнаружил, что Safari не устанавливает введенный файл cookie, но FF / IE устанавливает.

Что здесь не так?

Ответы [ 5 ]

62 голосов
/ 19 июля 2009

Похоже, вы нажали ошибку Safari здесь; вы перенаправляете любой посещающий браузер на / entry, одновременно устанавливая cookie, и Safari игнорирует заголовок Set-Cookie при обнаружении состояния HTTP 302:

$ curl -so /dev/null -D - http://4much.schnickschnack.info/
HTTP/1.1 302 Moved Temporarily
Server: nginx/0.7.61
Date: Sun, 19 Jul 2009 12:20:49 GMT
Content-Type: text/html;charset=utf-8
Connection: keep-alive
Content-Length: 14260
Content-Language: de
Expires: Sat, 1 Jan 2000 00:00:00 GMT
Location: http://4much.schnickschnack.info/entry
Set-Cookie: colorstyle="bright"; Path=/; Expires=1248092449.12
Set-Cookie: _ZopeId="73230900A39w5NG7q4g"; Path=/

Технически, это была бы ошибка в базовых классах Apple, я обнаружил ошибку WebKit , которая утверждает, что это так.

Я полагаю, что обходной путь - установить cookie не в index_html, а в записи.

За прошедшие годы с тех пор, как я впервые ответил на этот вопрос, эта проблема теперь кажется решенной, по крайней мере, в Safari 6, когда кто-то проверял все основные браузеры на поддержку Set-Cookie на перенаправлениях 302 в 2012 .

7 голосов
/ 04 апреля 2014

Похоже, это больше не проблема. Смотри http://blog.dubbelboer.com/2012/11/25/302-cookie.html

6 голосов
/ 06 мая 2010

Месяц назад я столкнулся с этим вопросом. Сначала я подумал, что это поврежденная банка с печеньем, потому что я мог вычистить куки и уйти.

Однако оно снова появилось. На этот раз я потратил час, просматривая его, просматривая отправленное сафари, и обнаружил проблему.

В этом случае у меня был массив значений cookie, отправляемых в браузер после входа в систему до перенаправления. Значения выглядели примерно так: «идентификатор пользователя», «полное имя пользователя», «другой идентификатор» и т. Д.

(да, идентификаторы зашифрованы, так что не беспокойтесь)

Полное имя моего пользователя было на самом деле в формате <lastname>, <firstname>.

Когда safari отправлял куки обратно на сервер, все после запятой после фамилии было сброшено. До этого момента отправлялись только значения.

Когда я удалил запятую, остальные значения начали работать нормально.

Похоже, что если вы отправляете значение cookie, которое содержит запятую, тогда safari неправильно экранирует его во внутреннем хранилище. Это заставляет меня думать, что если они не экранируют должным образом запятыми, то, возможно, существуют некоторые проблемы с безопасностью в коде обработки cookie в Safari.

Кстати, это было протестировано на Win 7 x64 с safari 4.0.5. Также я разместил веб-страницу по адресу: http://cookietest.livelyconsulting.com/, которая показывает эту точную проблему. (я удалил этот тестовый сайт)

IE, FF и chrome все правильно установили куки. сафари нет.

3 голосов
/ 04 сентября 2014

Мы столкнулись с очень похожей проблемой, когда Safari (v. 7.0.6) игнорировал cookie. Заголовок cookie выглядел совершенно нормально, почти идентично другому cookie, который запомнился .

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

2 голосов
/ 13 апреля 2014

Я столкнулся с той же проблемой с Chrome. Chrome не игнорирует заголовок set-cookie во время перенаправления, но вы никогда не узнаете порядок (сначала установите cookie или перенаправьте сначала). Вот что я попробовал:

У меня есть веб-сайт, который поддерживает английский и французский языки. Я реализовал это (с php) следующим образом:

localhost имеет ссылку на localhost / fr (который устанавливает cookie на французский и перенаправляет на localhost). Оно работает. (сначала установите cookie)

localhost / path1 имеет ссылку на localhost / fr? Return = / path1 (который устанавливает cookie на французский и перенаправляет на localhost / path1). Не работает (перенаправьте сначала, язык не изменился)

localhost / path1 имеет ссылку на localhost / fr? Return = www.google.com (который устанавливает cookie на французский и перенаправляет на google). Когда я снова вернулся на свой сайт, он на французском. (что означает, что set-cookie для французского не игнорируется, выполняется только после перенаправления)

Надеюсь, я проясню, английский для меня иностранный язык.

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