2012-04-13 11 views
4

APIのクライアントサイドライブラリをJSONPからCORSに移植します。 私はサーバー内のすべての正しいヘッダーを設定し、クライアントの指示されたすべての処理を行っていますが、Cookieに関する問題があります。 APIの認証方法はCookieで機能します。 JSONPでは、APIキーをパラメータとしてGETリクエストをAPIに出しました。その後、サーバーはapi.io.holalabs.com(API URL)にCookieを設定します。次回APIを呼び出すと、サーバーはCookieを要求してログインします。 問題は、ヘッダーにSet-Cookieが表示されても、cookieがapi.io.holalabs.comに設定されていないため、ログインに失敗することです。 これらは私のヘッダーです:CORSリクエストでクッキーを設定する

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version 
Access-Control-Allow-Methods:GET 
Access-Control-Allow-Origin:http://holalabs.com 
Access-Control-Expose-Headers:X-Api-Version, X-Request-Id, X-Response-Time 
Connection:close 
Content-Length:13 
Content-MD5:RjkY1fW5i5MKifxPk+r4tg== 
Content-Type:application/json 
Date:Fri, 13 Apr 2012 16:06:56 GMT 
Server:nginx/1.0.14 
Set-Cookie:apikey.sig=DYyrzLFUfJSjsmK5crkxHQg-rxQ; path=/; httponly 
X-Api-Version:1.0.0 
X-Request-Id:c78b4223-1caf-42db-a99e-b075bdc10ea5 
X-Response-Time:2 

EDIT:APIでCookieを使用すると、恐ろしい考えですので、今、私たちはユーザーのためにのauthヘッダーを使用しています。問題は終了しました!

+1

どのヘッダを使用しましたか? 'Authentication:Base ....'? – pabera

答えて

0

問題はたぶん閉じたが、誰もがこの問題に遭遇し、クッキーを使用する必要がある場合は、ここでは一つの可能​​な説明と解決策ですされていますので、

説明セッションIDがクッキーとして送られ

、およびリクエストはクロスドメインであり、ブラウザによるサードパーティのCookieとみなされます。いくつかのブラウザがサードパーティのCookieをブロックし、セッションが失われます。

ソリューションは、(ブラウザで)クライアントのセッションIDを生成し、サーバへの要求ごとにセッションIDを送信するセッションIDを保存するためのJavascriptのsessionStorageを使用します。

(詳細:Javascript Cross-Domain Request With Session

関連する問題