Nodejs中的会话管理

时间:2016-01-17 13:43:00

标签: javascript node.js session

我是NodeJS的初学者。刚刚开始了一个我需要会话管理概念的简单项目。那么如何在NodeJS应用程序中管理会话。

在我的项目中有两个文件: - app.js和routes.js。

那么我们添加会话以及如何添加??

app.js文件: -

var express = require('express'),
    app = express(),
    path = require('path');


app.set('views', path.join(__dirname , 'views'));
 
app.engine('html', require('hogan-express'));   
  
app.set('view engine', 'html');
  
app.use(express.static(path.join(__dirname,'public')));

require('./routes/routes.js')(express,app);

app.listen (3000 , function(){
    console.log("working on the Port 3000"); 
   
 });

和routes.js文件: -

module.exports = function(express, app){
    
    var router = express.Router();
    
    router.get('/', function(req , res , next){
       res.render('index',{title: 'Welcome'}); 
    });
    
  }

3 个答案:

答案 0 :(得分:2)

对于会话管理,我们需要一个中间件&#c; cookie-parser'。以前它是express的一部分,但是在express 4.0及更高版本之后它是一个单独的模块。

因此,要访问我们需要在项目中安装的cookie解析器:

  

npm install cookie-parser --save

然后将其添加到您的app.js文件中:



var cookieParser = require('cookie-parser');

 app.use(cookieParser()); 




然后我们需要会话模块。首先,通过以下方式安装会话模块:

  

npm install express-session --save

然后启用会话。我们在app.js文件中添加以下代码。



app.use(session({secret:config.sessionSecret, saveUninitialized : true, resave : true}));




然后来到routes.js文件: -

让我们假设有一个会话变量favColor。现在使用session设置颜色并进入另一页。代码如下: -



router.get('/setColor', function(req , res , next){
        req.session.favColor = 'Red';
        res.send('Setting favourite color ...!');
    });
    
    router.get('/getColor', function(req , res , next){
        res.send('Favourite Color : ' + (req.session.favColor == undefined?"NOT FOUND":req.session.favColor));
    });




这是关于会话管理的全部内容。我们还可以了解有关会话的更多信息: - This Reference

答案 1 :(得分:1)

我不建议您尝试构建自己的会话并使用https://github.com/expressjs/session而不是表达良好。

答案 2 :(得分:0)

2019年的更新,使用express-session 1.15.6(从1.5开始,无需使用cookie-parser,会话可以直接读写cookie。)

在app.js中:

const app = express()
const session = require('express-session');
const options = {
  name: 'foo', // Default is connect.sid
  store: this.store, // Default is memoryStore, which is for dev only. Setup redis or memcached for prod
  secret: 'bar', // Required, used to sign session id cookie
  saveUninitialized: true, // Forces a session that is "uninitialized" to be saved to the store
  resave: false, //Forces the session to be saved back to the session store
  rolling: true //Force a session identifier cookie to be set on every response
};
// Session method will return a middleware function.
const middleware = session(options);
// Now we can make use of session in all the requests
app.use(middleware)

在routes.js或为特定路由创建的任何处理程序文件中:

handler1(req, res, next) {
  req.session.someField = 'foo';
  // Use save method to update the store immediately, if there's other AJAX call pending. 
  req.session.save();
}

handler2(req, res, next) {
  console.log(req.session.someField); 
}

handler3(req, res, next) {
  // we use delete operator here.
  delete req.session.someField; 
}