Подтвердить что ты не робот

Safari не устанавливает Cookie, но IE/FF делает

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

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

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

4b9b3361

Ответ 1

Похоже, вы попали в ошибку 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 Foundation Classes, я нашел ошибку WebKit, которая утверждает, что это так.

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

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

Ответ 3

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

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

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

(да, идентификатор зашифрован, поэтому не стоит беспокоиться)

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

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

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

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

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

IE, FF и хром все правильно настроили cookie. сафари нет.

Ответ 4

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

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

Ответ 5

У меня возникла проблема с 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 для французского языка не игнорируется, выполняется только после перенаправления)

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