Node.js中的session

    一、什么是session

    session是另一种记录客户状态的机制,不同于cookie的是cookie保存在客户端浏览器中,而session保存在服务器上。

    客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session,客户端浏览器再次访问时只需要从session中查找该客户的状态就可以了。

    session相当于程序在服务器上建立一份客户档案,客户来访时只需要查询客户档案表。


    二、cookie和session两者的区别

    • cookie数据存放在客户的浏览器上,session数据放在服务器上。

    • cookie安全性低,别人可以分析存放在本地的cookie,session相对安全性高。

    • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用cookie。

    如果说cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么session机制就是通过检查服务器上的“客户明细表”来确认客户身份。

    建议:将登陆信息等重要信息存放为session、其他信息如果需要保留,可以放在cookie里。

    三、express中的session

    跟cookie一样都需要单独的安装和引用模块。安装模块:

    $sudo npm install express-session

    主要的方法就是session(options),其中options中包含可选参数,主要有:

    • name: 设置 cookie 中,保存 session 的字段名称,默认为 connect.sid 。

    • store: session 的存储方式,默认存放在内存中,也可以使用 redis,mongodb 等。express 生态中都有相应模块的支持。

    • secret: 通过设置的 secret 字符串,来计算 hash 值并放在 cookie 中,使产生的 signedCookie 防篡改。

    • cookie: 设置存放 session id 的 cookie 的相关选项,默认为 (default: { path: '/', httpOnly: true, secure: false, maxAge: null })

    • genid: 产生一个新的 session_id 时,所使用的函数, 默认使用 uid2 这个 npm 包。

    • rolling: 每个请求都重新设置一个 cookie,默认为 false。

    • resave: 即使 session 没有被修改,也保存 session 值,默认为 true。

    示例:

    var express = require('express');
       var session = require('express-session');
       var app = express();
       
       app.use(session({
           secret:'dt test', //secret的值建议使用随机字符串
           cookie:{maxAge:60*1000*30} // 过期时间(毫秒
       }));
       
       app.get('/',function(req,res) {
          if(req.session.sign) {//检查用户是否已经登录
              console.log(req.session);//打印session的值
              res.send('欢迎你再次登录');
          }else {
            req.session.sign = true;
            req.session.name = 'niefengjun';
            res.send('欢迎登陆!');
          }
       });
       app.listen(80);