Koa2学习(八)使用session
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
- 这个ctx.session是针对某一个浏览器用户的。
- 不断地刷新访问浏览器,浏览器上显示的访问次数会增加。
- 如果不使用数据库,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
- 当用户登陆到login页面时,session会将zhangsan保存为user_name。
- 用户访问index页面时,session会对当前的user_name做匹配,如果匹配成功,则认证登陆成功。
- 用户访问logout页面是,session会自我销毁。
- 这样再次访问index页面时,登陆就会失败。
Koa2学习(八)使用session的更多相关文章
- 微信公众平台开发教程(八)Session处理
微信公众平台开发教程(八)Session处理 在微信窗口,输入的信息有限,我们需要将一些信息分多次请求. 比如:在进行用户绑定时,我们需要输入用户的相关信息,比如:用户名.密码,或者姓名.电话号码,服 ...
- Python Tutorial 学习(八)--Errors and Exceptions
Python Tutorial 学习(八)--Errors and Exceptions恢复 Errors and Exceptions 错误与异常 此前,我们还没有开始着眼于错误信息.不过如果你是一 ...
- SVG 学习<八> SVG的路径——path(2)贝塞尔曲线命令、光滑贝塞尔曲线命令
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- Laravel学习笔记之Session源码解析(下)
说明:在中篇中学习了session的CRUD增删改查操作,本篇主要学习关闭session的相关源码.实际上,在Laravel5.3中关闭session主要包括两个过程:保存当前URL到session介 ...
- Laravel学习笔记之Session源码解析(中)
说明:在上篇中学习了session的启动过程,主要分为两步,一是session的实例化,即\Illuminate\Session\Store的实例化:二是从session存储介质redis中读取id ...
- Laravel学习笔记之Session源码解析(上)
说明:本文主要通过学习Laravel的session源码学习Laravel是如何设计session的,将自己的学习心得分享出来,希望对别人有所帮助.Laravel在web middleware中定义了 ...
- Koa2学习(九)与mongoDB交互
Koa2学习(九)与mongoDB交互 数据库下载与安装 windows下载地址:http://dl.mongodb.org/dl/win32/x86_64 linux下载地址:https://www ...
- Koa2学习(七)使用cookie
Koa2学习(七)使用cookie Koa2 的 ctx 上下文对象直接提供了cookie的操作方法set和get ctx.cookies.set(name, value, [options])在上下 ...
- Koa2学习(六)使用koa-router
Koa2学习(六)使用koa-router 配置简单路由 引入中间件 配置需要的路由 通过app.use注册路由 const Koa = require('koa') const app = new ...
随机推荐
- Windows Server定时执行bat
大家应该知道是在window服务器下使用bat批处理脚本文件,如果是Linux操作系统则是使用xshell脚本文件.由于自己是在做项目的时候对于文件系统中的日志进行定期删除对bat和xshell进行简 ...
- oracle如何重做日志组
1.查询数据库中的重做日志组 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STA ...
- 使用js获取页面的各种高度
使用js获取相关高度: 获取网页被滚动条卷去的高度——兼容写法: scrollHeight = documen.body.scrollTop || document.documentElement.s ...
- 【笔记】linux x86漏洞利用
0x1任意代码执行是如何实现的? 任意代码执行使用一种叫“覆盖返回地址”的技术来实现.这种方式使得攻击者重写位于栈上的返回地址,这将导致任意代码执行.
- python +selenium 自带case +生成报告的模板
https://github.com/huahuijay/python-selenium2这个就是 python +selenium的 里面还自带case 然后也有生成报告的模板 我的: https: ...
- Dividing coins (01背包)
It’s commonly known that the Dutch have invented copper-wire. Two Dutch men were fighting over a nic ...
- PTA 03-树3 Tree Traversals Again (25分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/667 5-5 Tree Traversals Again (25分) An inor ...
- HDU4135容斥原理
#include <cstdio> #include <string.h> #include <cmath> using namespace std; #defin ...
- [luoguP1627] 中位数(模拟?)
传送门 水题,怎么评到这个难度的? #include <cstdio> #include <iostream> #define N 200001 int n, b, p, an ...
- [luoguP1027] Car的旅行路线(Floyd)
传送门 建图麻烦,建完图搞一遍Floyd就好了. ——代码 #include <iostream> #include <cstdio> #include <cmath&g ...