2017-04-07 8 views
0

で作業する場合壊れるようです。サーバは、それが完了したら、我々はIFRAMEを作成するとiframe内のすべての要求はクッキーを送信することが期待されているhttps://product.example.com/rest/v1/stuffのSet-Cookieは、我々は、クッキーとの奇妙な問題に直面しているのiframe

Set-Cookie: id=c50b72c0-0b3a-11e7-b356-002590812948;Version=1;Comment="ID";Domain=.example.com;Path=/;HttpOnly 

のようにエンドポイントから以下を返します。ブラウザは、次の要求(のiframe REF)を行うと、いくつかのいずれかが

  1. 起こるクッキーが送信されなかっます
  2. クッキーは、ID = 9b639ea0-e800-11e6-b3ee-002590812948
  3. クッキーとして送られますID = 9b639ea0-e800-11e6-b3ee-002590812948として送られます。最初の要求が正しいクッキーを使用しない場合、ID = c50b72c0-0b3a-11e7-b356-002590812948
  4. クッキーがID = c50b72c0-0b3a-11e7-b356-002590812948
  5. として

に送信される、次のセットが変化してもよいですそして、異なることを行う(約50 HTTPロードページの後に呼び出し、各やって4つの記載されている状態のいずれか)私たちは、それはクローム、サファリ、およびFirefoxで起こることがわかり

デバッグ:

これは、アプリケーションの問題かもしれないが、我々はクッキーを設定しているものをデバッグする方法を見つけるためには至っていません。クッキー状態(httpまたはjsから)に変更があった場合に通知を受けることができるブラウザはありますか?

Javascriptを:私たちは14を反応させるの使用

は、ここに問題のコードです

メイクネットワーク要求ここ

getUri(id) 
    .then((uri) => { 
    self.dispatch(uri.uri); 
    }) 
    .catch((errorMessage) => { 
    self.actions.idFailures(errorMessage) 
    }) 

のgetURI

getUri(id) { 
return new Promise(function(resolve, reject) { 
    let url = 'rest/stuff/' + id; 
    request 
    .get(url) 
    .set('Accept', 'application/json') 
    .end(function(err, result){ 
     if(err || !result){ 
     reject(Error(err.response.text)); 
     } 
     else { 
     resolve(JSON.parse(result.text)); 
     } 
    }); 
}); 

}で、

設定はiframe

if(this.state.uri) { 
    instance = <iframe src={this.state.uri} style={iFrameStyle}> </iframe>; 
} 
+0

どのように私たちはあなたがコードを投稿していない場合は、間違ってやっているかを把握するために期待していますか? – Barmar

+0

投稿したコードにCookieに関連するものは表示されません。 – Barmar

+0

httpレスポンスはクッキーを設定しています – ekaqu

答えて

0

は、任意のブラウザがあり、我々はクッキーの状態への変更のための通知を受けることができたのですか?

あなたは定期的にクッキーの状態をチェックしたときにクッキーの状態変化コンソールに有用な情報を印刷するようにタイマーを書くことができます。サンプルコードはcan i be notified of cookie changes in client side javascriptを確認してください。次のコードは動作します:HTMLファイル応答のSet-Cookieを意味し、コードの実行は、見逃すことも後に

var lastCookie = document.cookie; 
var checkCookie = function() { 
    var currentCookie = document.cookie; 
    if (currentCookie != lastCookie) { 
    console.log('cookie changed!'); 
    console.log('old cookie:'); 
    console.log(lastCookie); 
    console.log('new cookie:'); 
    console.log(currentCookie); 
    lastCookie = currentCookie; 
    } 
}; 

window.setInterval(checkCookie, 1000); 

ただし、クッキーの変更のみを検出することができます。コードで

は、複数のクッキー値が推奨されないものSet-Cookieレスポンスヘッダを使用して設定されています。前の説明はIs it possible to set more than one cookie with a single Set-Cookie?を確認してください。

+0

"あなたのコードでは、複数のクッキー値が1つのSet-Cookieレスポンスヘッダを使って設定されています。"すべてのブラウザで、バックエンドがSet-Cookieごとに1つのクッキーキー/追加のフィールドだけがクッキーのパスとドメインのようなものです。 – ekaqu

+0

私はクッキーの変更を検出するためにjsスクリプトを試しましたが、何もしません(変更を表示するコンソールログを追加しました)。 – ekaqu

+0

@ekaqu 'Set-Cookie'属性の' Version'と 'Comment'部分はありますか? https://tools.ietf.org/html/rfc6265#section-4.1で関連する情報が見つかりませんでした。 – shaochuancs

関連する問題