1

Ich habe einige Probleme mit dem Cookie für eine SessionID zurückgegeben von Express an den Browser. Bei aufeinander folgenden Anfragen wird das empfangene Cookie nicht zurückgegeben und generiert somit für jede Anfrage eine neue Sitzung. Der Login-Status kann nicht gepflegt werden.NodeJS & Express-Cookie-Problem mit IE

Dieses Problem scheint nur auf IE11 und darunter auf einem Betriebssystem niedriger als Win10 oder so auftreten (zB: IE11 auf Win7). Edge, Chrome, Safari, FF ... keine Probleme.

Einige weitere Kontext: Wir haben zwei Anwendungen, sagen one.example.com und two.example.com. Bei Anfragen von beiden Anwendungen sollte der angemeldete Benutzer im Auge behalten werden. Der MEAN-Stack, der auf two.example.com zugreifbar ist, gibt Set-Cookie-Header für einen Tag, nur HTTP, mit einer Domain von '.example.com' auf Pfad '/' zurück.

Wenn ich eine Seite mit sage, 10 Ressourcen laden, erhalten alle diese Anfragen ein neues Cookie für die SessionID. Auch bei aufeinanderfolgenden Seitenladungen. Der Cookie wird niemals an den Server zurückgegeben.

HTTP Spur von Chrome:

GET http://localhost:3000/ 
HTTP/1.1 200 OK 
set-cookie: test=123 
set-cookie: webSessionId=s%3Av6R-... 

GET http://localhost:3000/lib/bootstrap/dist/css/bootstrap.css 
Cookie: test=123; webSessionId=s%3Av6R-... 
HTTP/1.1 200 OK 
Set-Cookie: test=123 

gesehen Chrome gibt die Session, es nicht durch Eil für die zweite Anforderung zurückgegeben wird

HTTP Spur von IE: response for first requested resource Antwort für die erste angeforderte Ressource request for second resource Anfrage für die zweite Ressource response for second requested resource Antwort für die zweite angeforderte Ressource

Die test123 ist ein hartkodierte Cookie ich auf jede Anfrage gesetzt ... (unabhängig davon, ob es zurückgegeben wurde) durch res.setHeader('Set-Cookie', 'test=123'); verwenden. An einem Punkt habe ich den Unterschied zwischen einem 'Set-Cookie' und 'Set-Cookie' gesehen (wie in den obigen Screenshots zu sehen ist), aber das scheint IE nicht zu beeinflussen.

So begann ich mit den anderen Cookie-Eigenschaften (Ablaufdatum, Domäne, Pfad, sichere & HTTP nur) zu spielen, sobald ich eine Domain zur Verfügung stellen ... der Test-Cookie wird nicht von IE zurückgegeben. In unserem Setup ist ".example.com" wirklich eine Voraussetzung. Die Domäne enthält keinen Unterstrich (_). In dev & tst enthält es einen Bindestrich "two-dev.example.com". Aber das IE (11) Problem existiert auch auf prd (two.example.com).

Hat jemand eine Idee, warum IE Cookies mit einer Domain zurückweist? Dieser sh * t fährt mich Bananen

mit: Express 4.13.1; Express-Sitzung 1.11.3; cookie-parser 1.3.2

Antwort

0

Ich denke, ich fand die Ursache ... die Domänen, die wir verwenden, sind Zwei-Buchstaben-Domänen, z. one.xx.yy & two.xx.yy. Wenn der Domain-Teil des Cookies auf .xx.yy gesetzt wird, ignoriert der IE den Cookie.

Jeder kann bestätigen, dass dieses Problem noch auf IE11 gültig ist?

How to set cookies for two-letter domains in IE8?

und/oder, wie dies zu umgehen? Neben dem offensichtlichen der Verwendung anderer Domänen.