【node】会话管理,cookie-parser 和 express-session

nodejs 和 express 都已经折腾很久了, 各类 demo 也作了很多。其中最关键的固然是各类中间件啦,须要什么 npm 安装一下,方便快捷。可是要真正作一个网站,必然绕不开登陆注册,也就是 cookie,session ,中间件是cookie-parser,express-sessionhtml

cookie-parser

cookie-parser 在用 express 生成器构建项目时自动安装的,它的做用就是设置,获取和删除 cookie。express-session 依赖于它。node

1. 引入

var cookieParser = require('cookie-parser');    #引入模块
app.use(cookieParser());        #挂载中间件,能够理解为实例化

这两行代码默认在app.js中写好了,表示如今能够直接使用 cookie 了。express

2. 建立cookie

res.cookie(name, value [, options]);

namecookie 名,valuecookie 值,能够是 json 对象或字符串。options 是选项,详细请阅这里,经常使用选项有:npm

{
    'maxAge': 90000,    # 有效时长,即90000毫秒后过时,String
    'signed': false     # 默认为false,表示是否签名,Boolean
}

建立 cookie 会在 http 响应头中添加Set-Cookie,从而在浏览器中设置 cookiejson

3. 获取cookie

var cookies = req.cookies      # 获取cookie集合
var value = req.cookies.key    # 获取名称为key的cookie的值

4. 删除cookie

res.clearCookie(name [, options])

namecookie 名,options 与建立 cookie 时所传一致api

5. 签名

上文所写 cookie 的各类操做,都是没有通过签名的。签名能够提升安全性。下面是使用签名生成 cookie 的方法,大同小异,修改上文便可浏览器

app.use(cookieParser('ruidoc'));   # 须要传一个自定义字符串做为secret
# 建立cookie的options中,必填 signed: true
res.cookie(name, value, {    
    'signed': true
});
var cookies = req.signedCookies      # 获取cookie集合
var value = req.signedCookies.key    # 获取名称为key的cookie的值

提示:使用签名时这三处必须一块儿修改,只改一处是无效的!安全

6. 栗子

// 设置cookie名为user,值为对象,90000ms过时,无签名
res.cookie('user', {
        id: 1,
        name: 'ruidoc'
    }, {
        maxAge: 900000 
    }
);

//获取设置的cookie
var user = req.cookies.user
// 设置cookie名为admin,值为对象,无过时时间,有签名
res.cookie('admin', { 'id': 1 }, {
        'signed': true
    }
);

//获取设置的cookie
var admin = req.signedCookies.admin

options 中没有设置过时时间的话,默认关闭浏览器即过时清除cookie

express-session

express-session 才是真正在服务端保存数据的中间件,它须要独立安装session

npm install express-session --save

而后在app.js中引入,在 app.use(cookieParser()) 以后挂载

var session = require('express-session');
app.use(session([options]));

一样说几个经常使用的 options

{
    'secret': 'ruidoc',     # 签名,与上文中cookie设置的签名字符串一致,
    'cookie': {
        'maxAge': 90000
    },
    'name': 'session_id'    # 在浏览器中生成cookie的名称key,默认是connect.sid
}

由于建立 session 的同时会建立 cookie 来保存 sessionId,因此 options 中的 cookie.maxAge 可看做是 session 的有效时长。

1. 建立session

# 建立一个session
req.session.key = value

# 建立多个session
req.session = {
    key1: value1,
    key2: value2
}

2. 获取session

var session = req.session      # 获取session集合
var value = req.session.key    # 获取名称为key的session的值

3. 销毁session

req.session.destroy()      # 清空全部session
req.session.key.destroy()    # 销毁名称为key的session的值

简单操做,仅止于此

相关文章
相关标签/搜索