11

CORS 経由で別のサーバーと通信する MobileSafari にページをロードしています。

デスクトップ ブラウザー (テスト済みの Chrome と Safari) では、ログインしてセッション Cookie を取得し、その後の要求でそのセッション Cookie を送り返すことができるため、すべての API 呼び出しで認証を受けることができます。

ただし、Mobile Safari 経由でログインすると、後続のリクエストで Cookie が返されません。

私はCharles Proxyを使用して何が起こっているかをスパイしています.

  1. POST https://myremoteserver.com/sessions.jsonログイン情報を渡す
  2. 成功し、有効なSet-Cookieヘッダーで応答が受信されます。
  3. GET https://myremoteserver.com/checkout.jsonCookie要求ヘッダーなしで要求されます。
  4. ログインしていないかのようにサーバーが応答します。

このスニペットを使用して、XHR オブジェクトに適切に設定されているZepto.jsことを確認します。withCredentials: true(コーヒースクリプトを許してください)

# Add withCredentials:true to the xhr object to send the remote server our cookies.
xhrFactory = $.ajaxSettings.xhr
$.ajaxSettings.xhr = ->
  xhr = xhrFactory.apply(this, arguments)
  xhr.withCredentials = yes
  xhr

そして、そのスニペットはデスクトップ ブラウザーでうまく機能します。追加する前は、それらのデスクトップ ブラウザーでセッション Cookie を保存できませんでした。

これがデスクトップブラウザのように動作するのを妨げる、MobileSafari の癖はありますか? 同じように機能しないのはなぜですか?


編集!

これが私のRails 2.3アプリでのCORSヘッダーのセットアップです。かなり標準的なものだと思います

def add_cors_headers
  if valid_cors_domain
    headers['Access-Control-Allow-Origin']      = request.headers['HTTP_ORIGIN']
    headers['Access-Control-Expose-Headers']    = 'ETag'
    headers['Access-Control-Allow-Methods']     = 'GET, POST, PATCH, PUT, DELETE, OPTIONS, HEAD'
    headers['Access-Control-Allow-Headers']     = '*,x-requested-with,Content-Type,If-Modified-Since,If-None-Match'
    headers['Access-Control-Allow-Credentials'] = 'true'
    headers['Access-Control-Max-Age']           = '86400'
  end
end

また、今日、Mountain Lion のデスクトップ Safari は Cookie を送信しなくなり、MobileSafari と同じように動作しました。昨日の私の評価が不正確だったのか、それとも Apple が私を荒らしているだけなのか、完全にはわかりません...

また、これhttps://はリモート URL で使用することによって影響を受ける可能性がありますか?

4

5 に答える 5

0

私は同じ問題に遭遇していました。

私のセットアップは次のとおりです。

  • ドメイン a.com のサーバー A 上の AngularJS (Ionic) アプリ
  • ドメイン b.com のサーバー B のバックエンドとして Passport JS を使用する NodeJS

Cookie を使用したログインは、iOS の Mobile Safari を除くすべてのブラウザでうまくいきました。また、iOS でのモバイル cookie (追跡しない) 設定の変更は、この問題に影響を与えませんでした。

解決策は、CNAME DNS レコードを設定することでした

backend.a.com CNAME b.com

于 2016-03-31T12:04:15.353 に答える
-1

iFrame 経由で Cookie を設定するアドレスを開く - これにより、Cookie が設定されます。

于 2014-11-04T05:49:16.040 に答える