最近做毕设需要在nodejs服务器下记录当前用户账号,所用的node框架是koa,所以相对应配套的用了koa-session,发现和之前学的session差不多,都是会话级别的。

一、session和token的区别

1、session鉴权流程

(1)用户登录的时候,服务端生成一个会话和一个id标识

(2)会话id在客户端和服务端之间通过cookie进行传输

(3)服务端通过会话id可以获取到会话相关的信息,然后对客户端的请求进行响应;如果找不到有效的会话,那么认为用户是未登陆状态

(4)会话会有过期时间,也可以通过一些操作(比如登出)来主动删除

2、token鉴权流程

(1)用户登录的时候,服务端生成一个token返回给客户端

(2)客户端后续的请求都带上这个token

(3)服务端解析token获取用户信息,并响应用户的请求

(4)token会有过期时间,客户端登出的时候也会废弃token,但是服务端不需要任何操作

3、两者区别

(1)session要求服务端存储信息,并且根据id能够检索,而token不需要。在大规模系统中,对每个请求都检索会话信息可能是一个复杂和耗时的过程。但另外一方面服务端要通过token来解析用户身份也需要定义好相应的协议。

(2)session一般通过cookie来交互,而token方式更加灵活,可以是cookie,也可以是其他header,也可以放在请求的内容中。不使用cookie可以带来跨域上的便利性。

(3)token的生成方式更加多样化,可以由第三方服务来提供

二、koa-session 使用方法

(1)首先在node环境下安装koa-session

 npm install --save koa-session

(2)在app.js文件下引入koa-session

 const session = require('koa-session');

(3)初始化koa-session

 app.keys = ['some secret hurr'];
const CONFIG = {
key: 'koa:sess',
maxAge: 86400000, //失效时间,默认是一天。
overwrite: true,
httpOnly: true, //表示是否可以通过javascript来修改,设成true会更加安全
signed: true, //这个涉及到cookie的安全性
rolling: false, //是涉及到cookie有效期的更新策略
renew: false, //是涉及到cookie有效期的更新策略
};
app.use(session(CONFIG, app));

(4)在登录成功后记录当前账号

 ctx.session.id = req_data.id; //设置session id

token和session的区别参考简书地址:https://www.jianshu.com/p/8f4cc45d712e

koa-session 记录当前会话内容的更多相关文章

  1. Servlet之会话(Session)以及会话追踪技术(Cookie),(URL重写)和(隐藏表单域)

    Session 什么是会话? 会话: Web应用中的会话 指的是一个客户端浏览器与Web服务器之间连续发生的一系列请求和响应的过程 会话状态: Web服务器和浏览器在会话的过程中产生的状态信息 作用: ...

  2. 安全性测试入门 (四):Session Hijacking 用户会话劫持的攻击和防御

    本篇继续对于安全性测试话题,结合DVWA进行研习. Session Hijacking用户会话劫持 1. Session和Cookies 这篇严格来说是用户会话劫持诸多情况中的一种,通过会话标识规则来 ...

  3. Session 与 sql 会话,mysql 权限设置,mybatis 逆向工程

    Session 与 Sql 会话注意点: 通过 sqlSessionFactoty 工厂建立的与sql的会话,在进行相应的插入操作后,需要进行 commit 操作才会让数据库执行插入更新操作.如何主键 ...

  4. Session攻击(会话劫持+固定)与防御

    1.简介 Session对于Web应用无疑是最重要的,也是最复杂的.对于web应用程序来说,加强安全性的第一条原则就是 – 不要信任来自客户端的数据,一定要进行数据验证以及过滤,才能在程序中使用,进而 ...

  5. Go Revel - Session / Flash(会话与flash)

    ##Session / Flash 作用域 revel提供了两种cookies存储机制: // 一个加密签过的cookie (限制为4kb). // 限制: Key 中不能有冒号 type Sessi ...

  6. 第二部分用户交互程序开发,通过paramiko记录ssh会话记录

    需求及任务:实现一个给用户登录的界面(通过ssh登到堡垒机上,然后给它展现一个命令行的页面,然后他选择登哪台机器,一选择就连上去且把日志也记录下来). 先在admin创建几条组数据并与用户关联如下图: ...

  7. 创建Cookie,简单模拟登录,记录登录名,购物车记录先前添加内容,session控制登录

     工作任务:模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站, ...

  8. 使用Spring Session做分布式会话管理

    在Web项目开发中,会话管理是一个很重要的部分,用于存储与用户相关的数据.通常是由符合session规范的容器来负责存储管理,也就是一旦容器关闭,重启会导致会话失效.因此打造一个高可用性的系统,必须将 ...

  9. [ASP.NET][Session] 使用 SQLServer 会话管理解决 Session 丢失问题

    使用 SQLServer 会话管理解决 Session 丢失问题 步骤 1.通过命令行执行 aspnet_regsql.exe 程序(不要双击安装),先在 CMD 中输入命令 cd C:\Window ...

随机推荐

  1. SAP MM 可以不用创建盘点凭证直接录入盘点结果?

    SAP MM 可以不用创建盘点凭证直接录入盘点结果? 可以.SAP标准功能就支持这么做. 事务代码 MI09 (Enter Count w/o Reference to Document), 输入pl ...

  2. CentOS 7安装指南

    CentOS 7安装指南(U盘版) 一.准备阶段 1.下载CentOS7镜像文件(ISO文件)到自己电脑,官网下载路径: http://isoredirect.centos.org/centos/7/ ...

  3. word中字体大小(pt)和网页中css设置font-size时用的px大小对应关系

    pt与px转换关系为 1px= 0.75pt. 所以word中五号字体(10.5pt)在网页中对应的大小为font-size:14px.(10.5 / 0.75 = 14) 初号44pt 小初36pt ...

  4. 如何开启红米手机4X的ROOT超级权限

    红米手机4X通过什么方法拥有了root权限?大家都清楚,Android机器有root权限,如果手机拥有了root相关权限,可以实现更强的功能,举个栗子大家公司的营销部门同事,使用大多数营销软件都需要在 ...

  5. Yapi部署说明

    1.环境搭建 确保 node 版本=> 7.6,请运行 node -v 查看版本号 确保 mongodb 版本 => 2.6,请运行 mongo --version 查看版本号 确保安装了 ...

  6. MySQL 基础知识梳理学习(一)----系统数据库

    information_schema 此数据库是MySQL数据库自带的,主要存储数据库的元数据,保存了关于MySQL服务器维护的所有其他数据库的信息,如数据库名.数据库表.表列的数据类型及访问权限等. ...

  7. Linux压缩打包tar命令总结

      命令简介   在Linux系统的维护.管理中,tar命令是一个使用频率很高的命令,tar命令的功能主要是将众多文件打包成一个tar文件并压缩,并且能保持文件的权限属性.tar其实最开始是用来做磁带 ...

  8. Web开发人员学习路线图

    http://www.runoob.com/w3cnote/2018-web-developer.html

  9. 《生命》第五集:Birds (鸟类)

    看了前四集之后意犹未尽,今天终于有时间来看第五集了. 本集讲的是鸟类,一个在恐龙开始繁荣的时代才开始有的物种. 鸟类和其他动物最不同的地方,就是羽毛,能隔热,保暖,最重要的是:能帮助他们飞行. 在秘鲁 ...

  10. 报错:[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop bei

    项目中遇到父组件传值 activeIndex <Tabs :tabs="tabs" :activeIndex="activeIndex" >< ...