web-dev-qa-db-ja.com

SafariはCookieを設定しませんが、IE / FFは設定します

サファリで奇妙なクッキーの問題を見つけました。 http://2much.ch にサーフィンする場合、FF/IEで入力してサイト内をサーフィンできます。

ただし、サファリを使用する場合は、1回しか入力できません。サイト内でサーフィンすることはできません。 Safariは入力されたCookieを設定しませんが、FF/IEは設定します。

ここで何が間違っていますか?

44
Gomez

ここでSafariのバグを見つけたようです。 Cookieを同時に設定しながら、アクセスしているブラウザを/ entryにリダイレクトし、Safariは302 HTTPステータスに遭遇したときにSet-Cookieヘッダーを無視します。

$ 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の場合は 2012年に302リダイレクトでSet-Cookieをサポートするすべての主要ブラウザをテストした でした。

63
Martijn Pieters

これはもはや問題ではないようです。 http://blog.dubbelboer.com/2012/11/25/302-cookie.html を参照してください

7
Iker Jimenez

一ヶ月前、私はこの問題に遭遇しました。最初は、Cookieを削除して実行できるため、破損したCookie jarであると考えました。

しかし、再びポップアップしました。今回は1時間かけて、送信されたものを見て、サファリが返送したものを確認し、問題を見つけました。

この場合、ログイン前にリダイレクトの前にブラウザーに送信されるCookie値の配列がありました。値は、「ユーザーID」、「ユーザーのフルネーム」、「その他のID」などのように見えました。

(はい、IDは暗号化されているので心配はありません)

ユーザーのフルネームは実際には<lastname>, <firstname> フォーマット。

サファリがCookieをサーバーにポストバックしていたとき、姓の後ろのコンマ以降はすべて削除されました。それまでの値のみをポストバックしていました。

コンマを削除すると、残りの値は正常に機能し始めました。

そのため、コンマを含むCookie値を送信した場合、safariはその内部ストレージで適切にエスケープしないようです。コンマが適切にエスケープされていない場合、safariのCookie処理コードにいくつかのセキュリティ上の問題がある可能性があります。

ちなみに、これはWin 7 x64とsafari 4.0.5でテストされました。 また、次のWebページを作成しました。 http://cookietest.livelyconsulting.com/ この問題を正確に示しています。(そのテストサイトを削除しました)

IE、FF、およびchromeはすべて正しくCookieを設定します。safariはそうではありません。

6
NotMe

Safari(v。7.0.6)がCookieを無視するという非常によく似た問題が発生しました。 Cookieヘッダーは完璧に見え、wasを記憶した別のCookieとほとんど同じでした。

原因は、不正なexpires値を持つprevious cookieヘッダーであることが判明しました。破損したCookieヘッダーのSafariの処理は、明らかに他のブラウザーほど堅牢ではありません。

3
Dag Høidahl

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は無視されず、リダイレクト後にのみ実行されます)

英語が私にとって外国語であることを明確にしたい。

2
user104338