koa2--session的实现
koa2原生功能只提供了cookie的操作,但是没有提供session操作。session只能自己实现或者通过第三方中间件实现。
- 如果session数据量很小,可以直接存在内存中
- 如果session数据量很大,则需要存储介质存放session数据
数据库存储方案
- 将session存放在Redis数据库中
- 需要用到中间件
- koa-generic-session koa2 处理session的中间件,提供存储介质的读写接口 。
- koa-redis 为koa-generic-session中间件提供Redis数据库的session数据读写操作。
- 将sessionId和对应的数据存到数据库
- 将数据库的存储的sessionId存到页面的cookie中
- 根据cookie的sessionId去获取对应的session信息
Redis安装:https://www.runoob.com/redis/redis-install.html
安装成功后,进入redis根目录,运行:
redis-server redis.windows.conf
成功显示:

依赖包安装:
npm install koa-generic-session koa-redis
使用演示:
const Koa = require('koa')
const redisStore = require('koa-redis')
const session = require('koa-generic-session')
const app = new Koa()
// 数据库对象
const store = redisStore().client
// 用作于session加密处理
app.keys = ['keys', 'keyskeys']
app.use(session({
// options
key: "SESSION_ID",
prefix: "pref",
store: redisStore()
}))
app.use(async ctx => {
if (ctx.request.url === '/set') {
// 设置session
ctx.session = {
user_id: Math.random().toString(16).slice(2).toUpperCase(),
count: 0
}
// 直接操作redis
await store.hset('name', 'test', 'messi')
ctx.body = {
code: 0
}
}
// 输出信息
if (ctx.request.url === '/') {
const name = await store.hget('name', 'test')
ctx.session.count++
ctx.body = {
name,
session: ctx.session
}
}
})
app.listen(4000, () => {
console.log('server running at:4000')
})
运行:
node demo.js
效果:



koa2--session的实现的更多相关文章
- Koa2学习(八)使用session
Koa2学习(八)使用session koa2框架不提供session的处理方法,这里我们需要借助一个第三方中间件koa-session来处理session. 先安装插件: $ npm i koa-s ...
- koa2实现session的两种方式(基于Redis 和MySQL)
一.基于MySQL的实现方式 这种方式需要安装koa-session-minimal和koa-mysql-session两个依赖. 执行 npm install koa-session-minimal ...
- koa2实现拦截器进行登录前session校验
//定义允许直接访问的url const allowpage = ['/login','/api/login'] //拦截 function localFilter(ctx) { let url = ...
- koa2学习笔记03 - 给koa2配置session ——koa2结构分层、配置数据库、接口
前言 这一章写的很没有底气,因为我完全不懂一个正经的后台应用是怎么结构分层的, 所有只能按照我自己的理解去写,即使这样也仅仅只分离出了controller层, 至于所谓的service层,dao层,完 ...
- KoaHub平台基于Node.js开发的Koa的get/set session插件代码详情
koa-session2 Middleware for Koa2 to get/set session use with custom stores such as Redis or mongodb ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- node koa2 玩起来都是中间件啊
玩的我想吐 !!! 整理下常用的中间件吧! 先列在这有空把这些中间件的使用技巧也写出来分享一下koa-router 路由中间件koa-bodyparser POST数据处理的中间件koa-stri ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
- Koa2
安装 yarn add koa 代码 Koa的核心代码就三行 const app = new Koa() app.use(middleware) app.listen(3000) const Koa ...
- 基于 Vue + Koa2 + MongoDB + Redis 实现一个完整的登录注册
项目地址:https://github.com/caochangkui/vue-element-responsive-demo/tree/login-register 通过 vue-cli3.0 + ...
随机推荐
- count(*) count(1) count(字段) 区别
count(*) count(1) count(字段) 区别 count(*)和count(字段) count(*)和count(字段)使用的目的是不一样的,在必须要使用count(字段)的时候还是要 ...
- CMU Advanced DB System - MVCC
https://zhuanlan.zhihu.com/p/40208895 Mysql的MVCC实现 https://severalnines.com/database-blog/comparing- ...
- ubuntu16.04 overlay 不支持redirect_dir开关
modinfo overlay--查看overlay版本 通过linux网站--https://elixir.bootlin.com/linux/v4.4.196/source/fs/overlayf ...
- Python80个练手项目列表
原文地址:https://www.shiyanlou.com/questions/102676/?utm_source=baidu&utm_medium=cpc&utm_campaig ...
- 爬虫中采集动态HTML介绍
JavaScript JavaScript 是网络上最常用也是支持者最多的客户端脚本语言.它可以收集 用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏. 我们可以在网 ...
- 卷积神经网络概念及使用 PyTorch 简单实现
卷积神经网络 卷积神经网络(CNN)是深度学习的代表算法之一 .具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类,因此也被称为“平移不变人工神经网络”.随着深度学习理论的提出和数值计算设备 ...
- matlab学习笔记12单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size
一起来学matlab-matlab学习笔记12 12_1 单元数组和元胞数组 cell array --cell,celldisp,iscell,isa,deal,cellfun,num2cell,s ...
- pycharm更改缩进快捷键-ubuntu系统
前言 ubuntu系统tab+shirt是切换窗口的快捷键,而这个快捷键也恰恰是pycharm这个快捷键,他们的快捷键产生了冲突,所以目前我们需要更改下pycharm的快捷键,这样就能愉快使用缩进功能 ...
- Visual Studio + Qt:GetVarsFromMakefile任务意外失败
问题: IntelliSense报告找不到头文件: 编译时报告GetVarsFromMakefile任务意外失败. 解决: 删除从Visual Studio装的Qt插件: 从Qt官网下载最新的插件:h ...
- angular4.x实现一个全选,反选,外加从下一页返回上一页,选中上一次的操作记录
productMap:any = new Map<string, string>(); //定义一个map的数据模型 //只要操作这个checkbox 那么只管把数据全部勾起了就行了 刷新 ...