cookie-parser模块与express-session模块

npm官网:www.npmjs.com
安装:npm install cookie-parser
报错:

image.png

配置文件的name与这包名一样就报错了。。。

(1)cookie-parser模块

发送cookie:

名,值,设置

app.get('/test', function(req, res) {
    res.cookie('name', 'heqi', { maxAge: 900000 });
});
修改cookie:覆盖即可
其他设置的值:
domain: 域名。设置子域名(二级域名)是否可以访问cookie。
例:domain:'.主域名'

name=value:键值对,可以设置要保存的 Key/Value,注意这里的 name 不能和其他属性项的名字一样

expires: 过期时间(秒),在设置的某个时间点后该 Cookie 就会失效,如 expires=Wednesday,
09-Nov-99 23:12:40 GMT

maxAge: 最大失效时间(毫秒),设置在多少后失效

secure: 当 secure 值为 true 时, cookie 在 HTTP 中是无效,在 HTTPS 中才有效

path: 表示 cookie 影响到的路由,如 path=/。如果路径不能匹配时,浏览器则不发送这个 Cookie

httpOnly: 是微软对 COOKIE 做的扩展。如果在 COOKIE 中设置了“httpOnly”属性,则通过程序(客户端)
(JS脚本、 applet 等)将无法读取到 COOKIE 信息,防止 XSS 攻击产生

signed: 表示是否签名 cookie, 设为 true 会对这个 cookie 签名,这样就需要用res.signedCookies 访问它
而不是 res.cookies 。被篡改的签名 cookie 会被服务器拒绝,并且 cookie值会重置为它的原始值
获取cookie

req的cookies属性:req.cookie

删除cookie:与浏览器一样,没有专门的方法。
res.cookie('username', 'zhangsan', { maxAge:0 });
使用signed属性加密cookie

1.配置中间件的时候需要传参
app.use(cookieParser('123456'));

2.设置 cookie 的时候配置 signed 属性

res.cookie('username', 'haha', { maxAge:900000, signed:true });
  1. 这样就需要用req.signedCookies 访问它而不是 req.cookies
    console.log(req.signedCookies);
    image.png

(2)express-session模块

一、 Session 简单介绍

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

二、 Session 的工作流程

当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于key,value 的键值对,然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)。 客户的信息都保存在服务端的session 中。(具体翻看图解HTTP)

三、 express-session 的使用:

1.安装 express-session
npm install express-session --save

2.引入 express-session
var session = require("express-session");

3.设置

app.use(session({
    secret: 'keyboard cat',
    resave: true,
    saveUninitialized: true
}))

4.使用
设置值 req.session.username = "张三";
获取值 req.session.username

5.设置参数:

secret:一个 String 类型的字符串,作为服务器端生成 session 的签名。
name:返回客户端的 key 的名称, 默认为 connect.sid,也可以自己设置。
resave:强制保存 session 即使它并没有变化,。 默认为 true。 建议设置成 false。
saveUninitialized:强制将未初始化的 session 存储。 当新建了一个 session 且未设定属性或值时, 它就处于未初始化状态。 在设定一个 cookie 前, 这对于登陆验证, 减轻服务端存储压力, 权限控制是有帮助的。(默认: true) 。 建议手动添加。
cookie:与cookie的设置一样,设置发送到客户端 的key 的属性, 默认值为{ path: ‘/’ , httpOnly: true, secure: false, maxAge: null }。
rolling:在每次请求时强行重新设置 cookie, 这将重置 cookie 过期时间(默认: false)

6.express-session 的常用方法:

req.session.username = '张三'; 
req.session.username
req.session.cookie.maxAge = 0; 
req.session.destroy(function(err) { 
})
后面两条可用于用户退出登录。

另外还有一个cookie-session模块,应该也差不多。

四、将session保存到mongodb:

可用于实现负载均衡

1.需要安装 express-session 和 connect-mongo 模块
2.引入模块

var session = require("express-session");
var MongoStore = require('connect-mongo')(session);

3.配置中间件

app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    rolling:true,
    cookie:{
        maxAge:100000
    },
    store: new MongoStore({
        url: 'mongodb://127.0.0.1:27017/person',
        touchAfter: 24 * 3600          // time period in seconds
    })
}))

这样就可以连接mongodb,自动创建sessions集合,然后将session对象自动存进去了。这当然也可以用一般的操作实现,但封装好的模块怎么能不用。


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容