2016-02-10 5 views
0

Мы создаем приложение nodejs, где мне нужно поддерживать сеансы. Мы используем выражение для поддержки переменных узла. Но проблема в том, что когда мы нажимаем новую услугу, создается новый сеанс.Nodejs, создающий сеанс по каждому запросу

app.js файл выглядит следующим образом

var RedisStore = require('connect-redis')(session); 
 

 
\t module.exports = function Sessions(url, secret) { 
 
\t var store = new RedisStore({ url: url }); 
 
\t var session = session({ 
 
\t \t secret: 'dfsdfdff', 
 
\t \t store: 'test', 
 
\t \t resave: true, 
 
\t \t saveUninitialized: true 
 
\t }); 
 

 
\t return session; 
 
\t };

var express = require('express'); 
var session = require('express-session'); 
var routes = require('./routes'); 
var http = require('http'); 
var https = require('https'); 
var path = require('path'); 
var Q = require('q'); 
var fs = require('fs'); 
var formidable = require("formidable"); 
var util = require('util'); 
var url = require('url'); 
var request = require('request'); 
var users = require('./routes/language'); 
var user_auth = require('./routes/auth'); 

auth.js файл выглядит следующим образом

exports.generateToken = function(req, res, next) { 
    res.render('index', { 
    page_title: 'PEN_V4'}); 
    var sess = req.session; 
    sess.user_id = 'Hello1'; 
    console.log('Hello 1============'); 
    console.log(sess.user_id); 
    console.log('session*****************************============'); 
    console.log(sess); 
    res.end(); 

} 
exports.myToken = function(req, res, next) { 
    console.log(req.session); 
    console.log('session============'); 
    console.log('session*****************************============'); 
    res.end(); 
} 

app.configure(function() { 
 
     app.use(express.bodyParser()); 
 
     app.use(express.methodOverride()); 
 
     app.use(express.static(__dirname + '/static')); 
 
     app.use(express.cookieParser()); 
 
     app.use(express.session({ 
 
      secret: 'alessios', 
 
      store: MemStore({ 
 
       reapInterval: 60000 * 10 
 
      }), 
 
\t \t \t cookie :{httpOnly: true} 
 
     })); 
 
    });

затем из index.html мы вызываем api's myToken и generateToken. Но оба apis показывают разные сеансы. Может ли кто-нибудь объяснить нам, что мы делаем неправильно?

+0

Пожалуйста, пост как инициализировать сеанс. Также, пожалуйста, разместите заголовки, отправленные из экспресс. – bolav

+0

добавил заголовки и метод intialization –

+0

Если я запустил 'curl -v http: // localhost: 3000 /' Я получаю этот ответ в заголовках: 'set-cookie: connect.sid = s% 3AvrxyuLkQ8JHDS7O5kZ9vL9jU0TOPaGip.K3zFYVzopymsz5eXPMEN5pTlaKBHgZso3DJu3EidmW8; Path = /; HttpOnly'. Пожалуйста, подтвердите, что заголовок set-cookie отправляется из вашего приложения. – bolav

ответ

0

Вы устанавливаете промежуточное ПО express-session? Просто требуется пакет не достаточно, вы должны использовать его, как это:

const session = require('express-session');  
const RedisStore = require('connect-redis')(session); 

app.use(session({ 
    store: new RedisStore(config.redis), 
    secret: 'w5qTAcEMgNeNzrPg', 
    proxy: true, 
    resave: true, 
    saveUninitialized: true 
})); 

(В этом примере я использую Redis сессия магазин)

+0

Я использую его таким же образом, как вы предложили –

0

Как вы используете встроенный в bodyParser и cookieParser, которые включены только в версии Express до 4.x, я пришел к выводу, что вы используете устаревшую версию Express. Ваша проблема может быть решена путем обновления Express (информация об обновлении с 3.x до 4.x: https://strongloop.com/strongblog/express-3-to-4-migration-guide/)

Существует проблема с заголовком set-cookie при настройке нескольких файлов cookie и, следовательно, файла cookie сеанса не задается по первому запросу (или любому другому запросу, где должен быть установлен другой файл cookie). Это в вашей полной настройке?

Для получения дополнительной информации по этому вопросу и возможного исправления, пожалуйста, прочитайте следующий ответ я дал еще один вопрос: Express-session with passport.js multiple cookies

+0

, а не ссылку для лучшего объяснения ответа. –

+0

На самом деле я не вижу причины публиковать тот же самый код и объяснение дважды, поскольку это не сделало бы объяснение само по себе «лучше». Кроме того, @Sumeet не уточнил, установлены ли в его настройке несколько файлов cookie, и поэтому неясно, является ли это реальной проблемой. Если вы следуете второй ссылке (http://stackoverflow.com/questions/36112592/express-session-with-passport-js-multiple-cookies/36310764#36310764), вы найдете один пример кода, показывающий проблему (включая сгенерированную заголовки) и код для исправления проблемы, если обновление невозможно. –

Смежные вопросы