サファリで奇妙なクッキーの問題を見つけました。 http://2much.ch にサーフィンする場合、FF/IEで入力してサイト内をサーフィンできます。
ただし、サファリを使用する場合は、1回しか入力できません。サイト内でサーフィンすることはできません。 Safariは入力されたCookieを設定しませんが、FF/IEは設定します。
ここで何が間違っていますか?
ここで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をサポートするすべての主要ブラウザをテストした でした。
これはもはや問題ではないようです。 http://blog.dubbelboer.com/2012/11/25/302-cookie.html を参照してください
一ヶ月前、私はこの問題に遭遇しました。最初は、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はそうではありません。
Safari(v。7.0.6)がCookieを無視するという非常によく似た問題が発生しました。 Cookieヘッダーは完璧に見え、wasを記憶した別のCookieとほとんど同じでした。
原因は、不正なexpires
値を持つprevious cookieヘッダーであることが判明しました。破損したCookieヘッダーのSafariの処理は、明らかに他のブラウザーほど堅牢ではありません。
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は無視されず、リダイレクト後にのみ実行されます)
英語が私にとって外国語であることを明確にしたい。