2017-04-07 3 views
0

Wir stehen vor einem seltsamen Problem mit Cookies. Der Server gibt die folgenden von einem Endpunkt wie https://product.example.com/rest/v1/stuffSet-Cookie scheint beim Arbeiten mit iframe beschädigt zu werden

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

Sobald dies geschehen ist, schaffen wir ein iframe und alle Anfragen in der iframe wird erwartet, dass das Cookie senden. Wenn macht der Browser die nächste Anforderung (iframe ref), eines der wenigen Dinge passiert

  1. kein Cookie
  2. Cookie wird als id = 9b639ea0-e800-11e6-b3ee-002590812948
  3. Cookie gesendet wird wird gesendet als id = 9b639ea0-e800-11e6-b3ee-002590812948; id = c50b72c0-0b3a-11e7-b356-002590812948
  4. Cookie gesendet wird als id = c50b72c0-0b3a-11e7-b356-002590812948

Wenn die erste Anforderung die richtige Cookie verwenden, der nächste Satz kann variieren und verschiedene Dinge tun (etwa 50 HTTP-Aufrufe nach dem Laden der Seite, wobei jeder einen der 4 aufgeführten Zustände ausführt)

Wir sehen, dass es in Chrome, Safari und Firefox passiert.

Debugging:

Dies ist ein Anwendungsproblem sein kann, aber wir haben noch einen Weg zu finden, zu debuggen, was das Cookie setzt. Gibt es einen Browser, in dem wir über Änderungen am Cookie-Status benachrichtigt werden können (von http oder js)?

Javascript:

Wir 14 verwenden reagieren, hier ist der Code in Frage

Fabrikat Netzwerk Anfrage

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

Hier ist 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)); 
     } 
    }); 
}); 

},

Set iframe

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

Wie erwarten Sie, dass wir herausfinden, was Sie falsch machen, wenn Sie keinen Code eingeben? – Barmar

+0

Ich sehe nichts in Bezug auf Cookies in dem von Ihnen geposteten Code. – Barmar

+0

Die HTTP-Antwort legt fest, wie der Cookie gesetzt wird – ekaqu

Antwort

0

Gibt es wurden jeder Browser können wir für jede Änderung Cookie Zustand benachrichtigt werden?

Sie können einen Timer schreiben, um den Cookie-Status regelmäßig zu überprüfen und nützliche Informationen in der Konsole zu drucken, wenn sich der Cookie-Status ändert. Überprüfen Sie zum Beispiel Code can i be notified of cookie changes in client side javascript. Der folgende Code funktionieren würde:

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); 

Allerdings kann die Cookie-Änderung erst nach dem Ausführungscode erkannt werden, die die Set-Cookie von HTML-Datei Antwort bedeutet, kann übersehen werden.

In Ihrem Code werden mehrere Cookie-Werte mithilfe eines Antwortkopfs Set-Cookie festgelegt, der nicht empfohlen wird. Überprüfen Sie Is it possible to set more than one cookie with a single Set-Cookie? für vorherige Diskussion.

+0

"In Ihrem Code werden mehrere Cookie-Werte mit einem Set-Cookie-Antwortheader festgelegt." Wir sehen in allen Browsern, dass das Backend einen Cookie-Schlüssel/Wert pro Set-Cookie zurückgibt nur zusätzliche Felder sind Zeug wie Pfad und Domäne des Cookies. – ekaqu

+0

Ich habe versucht, das js-Skript zu erkennen, Cookie-Änderung und es macht nichts (hinzugefügt Konsolenprotokoll, um Änderungen anzuzeigen). – ekaqu

+0

@ekaqu Ist "Version" und "Kommentar" Teil des Attributs "Set-Cookie"? Ich habe keine verwandten Informationen in https://tools.ietf.org/html/rfc6265#section-4.1 gefunden. – shaochuancs

Verwandte Themen