博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
express-session
阅读量:6003 次
发布时间:2019-06-20

本文共 2123 字,大约阅读时间需要 7 分钟。

express-session是Node和express里面处理session的中间件,一说到session,就要提到cookie,这两者的不同可见我的以前博客:

 

express-session中间件将会话数据存储在服务器上;它仅将会话标识(而非会话数据)保存在 cookie 中。从1.5.0版本开始, express-session不再依赖cookie-parser,直接通过req/res读取/写入;默认存储位置内存存储(服务器端)。

options参数

1. name - cookie的名字(原属性名为 key)。(默认:’connect.sid’)

 

2. store - session存储实例
3. secret - 一个String类型的字符串,作为服务器端生成session的签名,防篡改
4. cookie - session cookie设置 (默认:{ path: ‘/‘, httpOnly: true,secure: false, maxAge: null })
注意!这里的secure是在https协议下才设置为ture,在http下设置true,很有可能会造成不能把cookie里的session-id传回服务器,也就是session会失效。(个人理解)

详细可见官方文档:

 

5. genid - 生成新session ID的函数 (默认使用uid2库)
6. rolling - 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
7. resave - 强制保存session即使它并没有变化 (默认: true)也可以这样理解:是否允许)当客户端并行发送多个请求时,其中一个请求在另一个请求结束时对session进行修改覆盖并保存
8. proxy - 当设置了secure cookies(通过”x-forwarded-proto” header )时信任反向代理。当设定为true时, ”x-forwarded-proto” header 将被使用。当设定为false时,所有headers将被忽略。当该属性没有被设定时,将使用Express的trust proxy。
9. saveUninitialized - 强制将未初始化的session存储。当新建了一个session且未设定属性或值时,它就处于 未初始化状态。在设定一个cookie前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。(默认:true)(为什么就有帮助了?不懂,求解,是怎样帮助的?)
10. unset - 控制req.session是否取消(例如通过 delete,或者将它的值设置为null)。这可以使session保持存储 状态但忽略修改或删除的请求(默认:keep)
 
方法:

1. Session.destroy():删除session,当检测到客户端关闭时调用。

2. Session.reload():当session有修改时,刷新session。
3. Session.regenerate():将已有session初始化。
4. Session.save():保存session。

 

一旦我们将express-session中间件用use挂载后,我们可以很方便的通过req参数来存储和访问session对象的数据。req.session是一个JSON格式的JavaScript对象,我们可以在使用的过程中随意的增加成员,这些成员会自动的被保存到option参数指定的地方,默认即为内存中去。

一个小测试:

var express = require("express");var session = require('express-session');var app = express()// app.set('trust proxy', 1) // trust first proxyapp.use(session({    secret: 'keyboard cat',    resave: false,    saveUninitialized: true,    cookie: { secure: false }}));app.get("/",function (req,res) {    if(req.session.login) {        res.send("欢迎你" + req.session.username);    }else {        res.send("你没有登陆");    }});app.get("/login",function (req,res) {    req.session.login = true; //设置这个session    req.session.username = "Jack";    res.send("你已经成功登陆");});app.listen(3000);

 

 

转载于:https://www.cnblogs.com/zhangmingzhao/p/7904814.html

你可能感兴趣的文章
俄安全公司:iPhone自动向苹果服务器上传用户通话记录
查看>>
TCL免污式洗衣机:双方共赢的科技创新
查看>>
智能家居真的更安全吗?邻居可用Siri解锁你家的门锁
查看>>
新零售催生未来经济形态 线上线下全渠道融合达新高度
查看>>
测试VDI网络性能 保证终端用户体验
查看>>
嵌入式软件测试与一般软件测试之异同研究
查看>>
Cookie问题(烦了三天)
查看>>
华云数据重新定义企业级云平台服务
查看>>
大数据推动人工智能发展 AI+X将实现人工智能生活化
查看>>
IDC:IBM Bluemix 落地 中国PaaS市场竞争进入新阶段
查看>>
在线协作工具“一起写”获金山WPS战略投资
查看>>
专家解读工业物联网优势的商业模式
查看>>
清新区建成清远市首个农综改大数据平台
查看>>
sqlite3数据库归纳
查看>>
物联网普而不及 仍缺杀手级应用
查看>>
持续集成引擎 Hudson 和 Jenkins 的恩恩怨怨
查看>>
《微课实战:Camtasia Studio入门精要》——1.3 软件安装
查看>>
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.1.3 评估物理性能...
查看>>
良品铺子天猫618爆卖300万个手撕面包,还用数据改造线下
查看>>
这位阿里工程师的家,为何设置了重重机关?
查看>>