ho configurare il plugin espresso sessione in questo modo:espresso tornata di Internet Explorer
var express = require('express'),
session = require('express-session'),
uuid = require('node-uuid');
var expiration_day = new Date('9/15/2015'),
today = new Date(),
session_life = Math.abs(expiration_day.getTime() - today.getTime());
var config = {
name: 'mycookie', // session ID cookie name
key: 'mycookie', // session ID cookie name
secret: '$FGDFH$W#WEgfgdf',
hash: {
salt: '9883hjHFIDSU&U#H'
},
store: new MongoStore({mongooseConnection: db}),
unset: 'keep', //never remove expired sessions
saveUninitialized: true, //always create session, even if nothing is stored
resave: false, //don't save session if unmodified
ttl: session_life,
autoRemove: 'disabled', //disable expired sessions cleaning
genid: function (req) {
"use strict";
return uuid.v4();
},
cookie: {
path: '/api', // cookie will be stored for requests under '/api'
httpOnly: false,
domain: 'example.com',
secure: false,
expires: expiration_day,
maxAge: session_life
}
};
app.sessionMW = session(config);//session middleware
nei browser Chrome e Mozilla Firefox, una sola sessione viene creato per l'utente. Questa sessione è disponibile su tutte le rotte che utilizzano il middleware sessionMW. Quindi se si esegue una richiesta GET o POST a/api/users/or/api/sessions, lo stesso ID di sessione viene memorizzato in un cookie e viene inviato nell'intestazione del cookie per ogni richiesta.
Internet Explorer non funziona in questo modo. Per ogni richiesta, viene creata una nuova sessione. La sessione è archiviata sul server e ho confermato che c'è un nuovo cookie nel browser per ogni percorso dell'applicazione.
Ho definito il dominio, il percorso e la scadenza nei cookie. Il cookie in IE mostra questi valori.
Non uso cookieParser, quindi non può essere il problema.
Il problema sembra essere sul lato client, comunque. Internet Explorer non invia l'intestazione del cookie con la richiesta. Riceve l'intestazione del set-cookie nella risposta per ogni richiesta. Ma i dati non vengono mai riutilizzati nelle richieste successive.
Potrebbe essere un problema CORS? Il cookie non è per lo stesso dominio su cui sto eseguendo l'applicazione. Ho bisogno di una sessione su tutte le rotte dell'API ospitata su un altro dominio.
Il lato client è configurato per includere i cookie nelle richieste CORS:
$.ajaxSetup({
cache: false,
xhrFields: {
withCredentials: true //all AJAX requests should include Cookie data
}
});
mando queste intestazioni di controllo accetta-in risposta a ogni richiesta:
Access-Control-Allow- credenziali: true
Access-Control-Allow-intestazioni: le sue origini, X-richiesta-Con, Content-Type,
Accetta Access-Control-Allow-Metodi: OPZIONI, GET, POST, PUT, PATCH
Access-Control-Allow-Origin: http://example.com
Perché IE non Impostazione dell'intestazione del cookie nelle richieste? Il dominio non ha underscore nel suo nome e non inizia con un numero.
https: //developer.mozilla.org/it-it/docs/Web/API/XMLHttpRequest # xmlhttprequest-withcredentials – robertklep