本篇主要段落翻译来自https://github.com/expressjs/session

客户端与服务会使用一个Sessionid的Cookie值来进行客户端和服务器端会话的匹配,这个Cookie一般是服务器端读/写的,并在Http请求响应的Header中的Set-Cookie属性设置:

express-session是针对nodejs express框架提供的一套session扩展

主要参数有 secret,sesave,saveUninitialized,cookie

cookie主要属性如下,默认值 { path: '/', httpOnly: true, secure: false, maxAge: null }

domain:设置cookie可以设置的域名,如果没有设置则cookie默认在当前域可以使用

expires:cookie失效时间,可以设置时间,不建议给固定时间,设置maxAge之后自动会生成这个值

例子

//获取当前时间
var date=new Date();
var expireDays=10;
//将date设置为10天以后的时间
date.setTime(date.getTime()+expireDays*24*3600*1000);
//将userId和userName两个Cookie设置为10天后过期
expires:date.toGMTString();

httpOnly:属性禁止客户端JavaScript的访问,禁止后不能使用document.cookie

maxAge:单位毫秒,从设置cookie开始多少毫秒失效

如果maxAge和expires都设置了,最后设置的属性生效.

path:路径,默认值为域名的根路径.

sameSite: SameSite-cookies是一种机制,用于定义cookie如何跨域发送。这是谷歌开发的一种安全机制,未来的一种cookie跨域授权处理方式,不明白的就不用设置了

(Strict是最严格的防护,有能力阻止所有CSRF攻击。然而,它的用户友好性太差,因为它可能会将所有GET请求进行CSRF防护处理。

例如:一个用户在reddit.com点击了一个链接(GET请求),这个链接是到facebook.com的,而假如facebook.com使用了Samesite-cookies并且将值设置为了Strict,那么用户将不能登陆Facebook.com,因为在Strict情况下,浏览器不允许将cookie从A域发送到B域。

Lax(relax的缩写?)属性只会在使用危险HTTP方法发送跨域cookie的时候进行阻止,例如POST方式。

例1:一个用户在reddit.com点击了一个链接(GET请求),这个链接是到facebook.com的,而假如facebook.com使用了Samesite-cookies并且将值设置为了Lax,那么用户可以正常登录facebok.com,因为浏览器允许将cookie从A域发送到B域。

例2:一个用户在reddit.com提交了一个表单(POST请求),这个表单是提交到facebook.com的,而假如facebook.com使用了Samesite-cookies并且将值设置为了Lax,那么用户将不能正常登陆Facebook.com,因为浏览器不允许使用POST方式将cookie从A域发送到B域。

)

值true:sameSite使用strict模式

值false:不设置sameSite属性

值lax:sameSite使用lax模式

值strict: sameSite使用strict模式

secure:设置cookie的secure值,默认是不设置任何值

setSecure(true); 的情况下,只有https才传递到服务器端。http是不会传递的。

genid:设置创建session id的自定义函数,默认使用 uid-safe扩展来生成id, 自定义genid创建函数时一定要保证创建的id不要重复。

name :用来设置在response中范围session id是属性值,reuqest中可以用默认的request.session.id访问。默认值为connect.sid

    我用response['connect.sid'] 得不到值,同志仍须努力吧

proxy:代理,通过设置这个值可以设置X-Forwarded-Proto 头,

    值有 true (X-Forwarded-Proto使用),false (所有头信息忽略,只有tls/ssl可以安全连接),undefined(使用trust proxy 设置) 具体大家研究,因为没有整代码大家继续努力实践

resave:是否允许session重新设置,要保证session有操作的时候必须设置这个属性为true

rolling:是否按照原设定的maxAge值重设session同步到cookie中,要保证session有操作的时候必须设置这个属性为true

saveUninitialized:是否设置session在存储容器中可以给修改

  session过期30分钟,没有人操作时候session 30分钟后过期,如果有人操作,每次以当前时间为起点,使用原设定的maxAge重设session过期时间到30分钟只有这种业务场景必须同行设置resave rolling为true.同时saveUninitialized要设置为false允许修改。

secret:用来注册session id 到cookie中,相当与一个密钥。

store:session存储的实例子,一般可以用redis和mangodb来实现

unset:设置req.session在什么时候可以设置

  值:destory:请求结束时候session摧毁,值:keep session在存储中的值不变,在请求之间的修改将会忽略,而不保存

方法

req.session

实现实例化

app.use(session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }}))

Session.regenerate()

创建一个session  实例化之后会自动构建session,我暂时没有使用这个的场景

req.session.regenerate(function(err) {
// will have a new session here
})

Session.destroy()

摧毁一个session,摧毁后会重新生成新的session 多个应用使用通一套session的时候慎用

req.session.destroy(function(err) {
// cannot access session here
})

  

Session.reload()

session重新加载,暂时我没有碰到需要重新加载的情况

req.session.reload(function(err) {
// session updated
})

  

Session.save()

手动保存一个session,要控制到权限的时候可用到

req.session.save(function(err) {
// session saved
})

  

req.session.id

从request中获取sessionId

req.session.cookie

从request中获取session作为令牌的cookie值

Cookie.maxAge

req.session.cookie.maxAge,获取过期时间毫秒数

req.sessionID

只有在session loaded/created时候才可以读到,慎用。

Session Store Implementation

session store的诸多回调,session store必须是事件驱动的而且是具体方法才可以触发,因没有做相关store太多实践,不做太多说明

store.all(callback)

返回一个存储store的数组

store.destroy(sid, callback)

在使用destory/delete 一个session时的回调

store.clear(callback)

delete 一个session时的回调

store.length(callback)

获取session的总长度在一个store中

store.get(sid, callback)

通过sessionid获取一个store事例对象

store.set(sid, session, callback)

自动生成一个sessionid或者调用save 一个session对象时候回调

store.touch(sid, session, callback)

使用touch更新session的时候回调

因翻译水平和实践时间有限,欢迎大家对错误之处指出.thanks

express-session使用理解的更多相关文章

  1. ECshop中的session机制理解

    ECshop中的session机制理解     在网上找了发现都是来之一人之手,也没有用自己的话去解释,这里我就抛砖引玉,发表一下自己的意见,还希望能得到各界人士的指导批评! 此session机制不需 ...

  2. express session 和 socketio session关联

    express session http是没有状态的协议, 需要web框架自己实现会话和会话管理工作. express框架有session插件可以使用. 见如下介绍: https://www.tuto ...

  3. php中session的理解

    一.Session是什么 Session一般译作会话,牛津词典对其的解释是进行某活动连续的一段时间.从不同的层面看待session,它有着类似但不完全同样的含义.比方,在web应用的用户看来,他打开浏 ...

  4. php session的理解【转】

    目录 1.什么是session? 2.Session常见函数及用法? ● 如何删除session? ● SESSION安全: Session跨页传递问题: 1.什么是session?   Sessio ...

  5. express session 实现登录

    https://www.cnblogs.com/mingjiatang/p/7495321.html Express + Session 实现登录验证   1. 写在前面 当我们登录了一个网站,在没有 ...

  6. express session

    一.什么是session? 最近在学习node.js 的express框架,接触到了关于session方面的内容.翻阅了一些的博客,学到了不少东西,发现一篇博文讲的很好,概念内容摘抄如下: Sessi ...

  7. express --- session详解

    之前一直做前端相关的工作,所以不太清楚session,也没有主动了解,最近在学node,对session的认识又有所加深,故总结之. 注: 关于session的一些配置问题,可以看这里. 第一部分: ...

  8. php session的理解与使用

    session学习参考链接:1.http://www.w3cschool.cn/php_sessions.html:2.http://php.net/manual/zh/book.session.ph ...

  9. JAVA EE中session的理解

    转自[互动百科]http://www.baike.com/wiki/Session   Session Session:在计算机中,尤其是在网络应用中,称为“会话”.Session直接翻译成中文比较困 ...

  10. express+session实现简易身份认证

    本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 文章概览 本文基于express.express-session ...

随机推荐

  1. BZOJ 4614 【Wf2016】 Oil

    题目链接:Oil 感觉同时几线作战有点吃不消啊-- 这道题有一个显然的结论,那就是最优的直线一定过某条线段的端点. 仔细想想很有道理.如果最终的直线没有过线段的端点的话,那么这条直线就一定可以平移,直 ...

  2. Android实现类似换QQ头像功能(图片裁剪)

    现在几乎所有的App都有用户登录模块,需要设置用户头像,而关于用户头像部分无疑也是比较头疼的,目前大部分应用的头像部分会有两种方式:一种是利用系统的裁剪功能去获取用户头像,一种就是获取到图片或者照片的 ...

  3. 捕获起英文名Edda的灵感来源,我的心愿是程序员这个行业能够男女人数平衡

    在腾讯的暑期训练营结识过不少鹅厂的前辈,他们对我的成长提供了很大的帮助,可以说有着知遇之恩,大部分现在还保持着联系,请教问题时会不吝赐教,以至于就在前两天11号企鹅18岁的成年礼,朋友圈刷满了领腾讯总 ...

  4. SASS 入门笔记

    参考资料: SASS 用法指南 SASS 语法 Sass Basics SASS_REFERENCE sass 有两种后缀名文件:一种后缀名为 sass,不使用大括号和分号:另一种就是我们这里使用的 ...

  5. 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串

    写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...

  6. C语言学习 第九次作业总结

    本次作业练习的内容是二维数组.下面我先简单的说下二维数组的基本知识点: 二维数组其实这个中文概念颇有误导--会让人感觉这是一个两个维度的概念.所以很多的国外的C语言书籍上会称这种数组为多下标数组:即首 ...

  7. 踢出非法Linux用户

    非法添加用户及非法进去的远程操作用户! 01.非法用户闯入系统 最简单的办法就是用 w 命令来检查. 如果确认有非法用户出现在系统内,可以立即 kill 用户相关进程. kill  -9  `lsof ...

  8. IFC格式简介

    IFC是一个数据交换标准, 用于不同系统交换和共享数据.当需要多个软件协同完成任务时, 不同系统之间就会出现数据交换和共享的需求.这时, 工程人员都希望能将工作成果(这里就是工程数据), 从一个软件完 ...

  9. C#设计模式(2)——简单工厂模式

    一.概念:简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创 ...

  10. SimpleDateFormat转换时间格式

    SimpleDateFormat有两个常用的方法parse和format 其中SimpleDateFormat在创建时有一下集中格式可以选择 SimpleDateFormat sdf = new Si ...