NodeJS express-session req.session n’est pas défini

Je travaille sur un système de connexion simple, mais il semble que la session ne soit pas enregistrée.

J’ai créé un code simple pour les tests. Quelqu’un peut-il me dire ce qui ne va pas? Je suis en train de me connecter et après cela, je lance is_logged mais je ne suis jamais connecté et les deux sessions ne sont pas définies

var port = process.env.PORT || 8080; var express = require('express'); var app = express(); var cookieParser = require('cookie-parser'); var session = require('express-session'); app.use(cookieParser()); app.use(session({ secret: "fd34s@!@dfa453f3DF#$D&W", resave: false, saveUninitialized: true, cookie: { secure: true } })); app.post('/test_login', function(req, res){ req.session.users_schema = 1; req.session.user_doc = 2; res.json({"first": req.session.users_schema, "second": req.session.user_doc}); }); app.post('/test_is_loggin', function(req, res){ if( !req.session.users_schema || !req.session.user_doc ) { console.log("no"); res.json({"first": 1, "second": 1}); } else { console.log("no2"); res.json({"first": req.session.users_schema, "second": req.session.user_doc}); } }); app.listen(port); console.log('Listening on port ' + port); 

C’est à cause de l’option cookie.secure = true

citation

Veuillez noter que secure: true est une option recommandée. Cependant, il nécessite un site Web compatible https, c.-à-d. Que HTTPS est nécessaire pour les cookies sécurisés.

voir https://github.com/expressjs/session#cookie-options

Vous devez le définir sur false pour autoriser les cookies de session sur un hôte non https ou utiliser un hôte https.

code de test

 var port = process.env.PORT || 8080; var express = require('express'); var app = express(); var cookieParser = require('cookie-parser'); var session = require('express-session'); app.use(cookieParser()); app.use(session({ secret: "fd34s@!@dfa453f3DF#$D&W", resave: false, saveUninitialized: true, cookie: { secure: !true } })); app.get('/test_login', function(req, res){ req.session.users_schema = 1; req.session.user_doc = 2; res.json({"first": req.session.users_schema, "second": req.session.user_doc}); }); app.get('/test_is_loggin', function(req, res){ if( !req.session.users_schema || !req.session.user_doc ) { console.log("no"); res.json({"first": 1, "second": 1}); } else { console.log("OK"); res.json({"first": req.session.users_schema, "second": req.session.user_doc}); } }); app.listen(port); console.log('Listening on port ' + port); 

sortie

 [mh-cbon@pc15 test] $ node express-session.js Listening on port 8080 OK 

Je ne suis pas sûr, mais cela pourrait être lié à la façon dont j’envoie les données?

  

=========================================

RESOLU !!!

il était lié à la façon dont j’envoie mes données, je l’ai modifié comme suit:

CLIENT:

 $.ajax({ type : "POST", xhrFields: {withCredentials: true}, // ADDED THIS LINE url : '//localhost:8080/test_login', data : { }, success : function(data) { console.log(data); }, error : function(req, errortype) { console.log("ERROR"); } }); 

SERVEUR:

 app.use(function(req, res, next) { res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header("Access-Control-Allow-Origin", "http://localhost"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); 

Merci beaucoup @ mh-cbon