Koa2学习(八)使用session

koa2框架不提供session的处理方法,这里我们需要借助一个第三方中间件koa-session来处理session。

先安装插件:

$ npm i koa-session

通过注册这个中间件,我们可以直接通过ctx.session来操作session:

const Koa = require('koa')
const app = new Koa()
const session = require('koa-session')
app.keys = ['secret'] // session加密字段
app.use(session({
key: 'koa:sess', //cookie key (default is koa:sess)
maxAge: 86400000, // cookie的过期时间 maxAge in ms (default is 1 days)
overwrite: true, //是否可以overwrite (默认default true)
httpOnly: true, //cookie是否只有服务器端可以访问 httpOnly or not (default true)
signed: true, //签名默认true
rolling: false, //在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
renew: false, //(boolean) renew session when session is nearly expired,
}, app))
app.use(ctx => {
// ignore favicon
if (ctx.path === '/favicon.ico') return
console.log(ctx.session)
let n = ctx.session.views || 0
ctx.session.views = ++n
ctx.body = n + ' views'
});
app.listen(8000) module.exports = app
  1. 这个ctx.session是针对某一个浏览器用户的。
  2. 不断地刷新访问浏览器,浏览器上显示的访问次数会增加。
  3. 如果不使用数据库,session是保存在内存中的。在服务端通常会使用redis等方案来使session持久化。

现在我们来模拟一个简单的登陆:

const Koa = require('koa')
const app = new Koa()
const session = require('koa-session')
app.keys = ['secret'] // session加密字段
app.use(session({}, app)) app.use(async (ctx, next) => {
if (ctx.url === '/login') {
ctx.session.user_name = 'zhangsan'
ctx.body = {
msg: '登录成功'
}
}
await next()
})
app.use(async (ctx, next) => {
if (ctx.url === '/logout') {
ctx.session = null
ctx.body = {
msg: '退出成功'
}
}
await next()
})
app.use(async ctx => {
console.log(ctx.session)
if (ctx.url === '/index') {
if (ctx.session.user_name === 'zhangsan') {
ctx.body = {
msg: '成功匹配到用户zhangsan'
}
} else {
ctx.body = {
msg: '登陆验证失败'
}
}
}
})
app.listen(8000) module.exports = app
  1. 当用户登陆到login页面时,session会将zhangsan保存为user_name。

  2. 用户访问index页面时,session会对当前的user_name做匹配,如果匹配成功,则认证登陆成功。

  3. 用户访问logout页面是,session会自我销毁。

  4. 这样再次访问index页面时,登陆就会失败。

Koa2学习(八)使用session的更多相关文章

  1. 微信公众平台开发教程(八)Session处理

    微信公众平台开发教程(八)Session处理 在微信窗口,输入的信息有限,我们需要将一些信息分多次请求. 比如:在进行用户绑定时,我们需要输入用户的相关信息,比如:用户名.密码,或者姓名.电话号码,服 ...

  2. Python Tutorial 学习(八)--Errors and Exceptions

    Python Tutorial 学习(八)--Errors and Exceptions恢复 Errors and Exceptions 错误与异常 此前,我们还没有开始着眼于错误信息.不过如果你是一 ...

  3. SVG 学习<八> SVG的路径——path(2)贝塞尔曲线命令、光滑贝塞尔曲线命令

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  4. Laravel学习笔记之Session源码解析(下)

    说明:在中篇中学习了session的CRUD增删改查操作,本篇主要学习关闭session的相关源码.实际上,在Laravel5.3中关闭session主要包括两个过程:保存当前URL到session介 ...

  5. Laravel学习笔记之Session源码解析(中)

    说明:在上篇中学习了session的启动过程,主要分为两步,一是session的实例化,即\Illuminate\Session\Store的实例化:二是从session存储介质redis中读取id ...

  6. Laravel学习笔记之Session源码解析(上)

    说明:本文主要通过学习Laravel的session源码学习Laravel是如何设计session的,将自己的学习心得分享出来,希望对别人有所帮助.Laravel在web middleware中定义了 ...

  7. Koa2学习(九)与mongoDB交互

    Koa2学习(九)与mongoDB交互 数据库下载与安装 windows下载地址:http://dl.mongodb.org/dl/win32/x86_64 linux下载地址:https://www ...

  8. Koa2学习(七)使用cookie

    Koa2学习(七)使用cookie Koa2 的 ctx 上下文对象直接提供了cookie的操作方法set和get ctx.cookies.set(name, value, [options])在上下 ...

  9. Koa2学习(六)使用koa-router

    Koa2学习(六)使用koa-router 配置简单路由 引入中间件 配置需要的路由 通过app.use注册路由 const Koa = require('koa') const app = new ...

随机推荐

  1. SQL练习题笔记

    查找最晚入职员工的所有信息 select * from employees order by hire_date desc limit 1 查找入职员工时间排名倒数第三的员工所有信息 select * ...

  2. shell for mysql backup in linux

    今天上班只有一台linux系统,就学着在linux上写了个脚本,没啥技术含量 省得每天敲代码备份 没有设置自动备份时间,这里可以参照 http://www.th7.cn/db/mysql/201305 ...

  3. FZU-2148-Moon Game,,几何计算~~

    Problem 2148 Moon Game Time Limit: 1000 mSec Memory Limit : 32768 KB  Problem Description Fat brothe ...

  4. hrbust-1909理工门外的树,不用线段数,贪心思路~~

    理工门外的树 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 605(125 users) Total Accepted: 154(11 ...

  5. SPOJ LCS 后缀自动机找最大公共子串

    这里用第一个字符串构建完成后缀自动机以后 不断用第二个字符串从左往右沿着后缀自动机往前走,如能找到,那么当前匹配配数加1 如果找不到,那么就不断沿着后缀树不断往前找到所能匹配到当前字符的最大长度,然后 ...

  6. msp430项目编程22

    msp430中项目---充电控制系统 1.定时器工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习

  7. 如何使用google解决问题

    如何使用google解决问题 redguardtoo著 文章选自2004年<程序员>杂志第8期P56 前面收集了篇如何问问题的文章就是<学会提问>http://blog.pro ...

  8. response对象学习

    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...

  9. win10 笔记本猎豹WiFi无法打开

    网卡驱动太新了,先把网卡驱动卸载,重新安装一个就可以,用驱动精灵,17.15.0.5版本就可以

  10. json解析bug之ERROR ExceptionController:185 - not close json text, token : :

    错误:ERROR ExceptionController:185 - not close json text, token : : 原因:json数据格式有误.!我的错误是,缺少了一个包括json数据 ...