一. Session是什么
1) cookie存储用户标识
2)用户信息则存储到session中方
3)session即用户信息的存储,和cookie有对应关系
二、koa2实现登陆------session设置
- 安装npm插件koa-generic-session: npm官网(test4)
控制台中执行npm i koa-generic-session --save
- app.js中引入‘koa-generic-session’
const session = require('koa-generic-session')
- 定义session中间件
配置cookie
app.use(session({
// 配置cookie
cookie: {
path: '/', // 使cookie在整个根目录下都有效,即只要包含根目录就有效
httpOnly: true, // cookie只允许服务端操作
maxAge: 24*60*60*1000 // cookie的过期时间(这里是一天)
}
}))
配置密钥
app.keys = ['qwertyuiop**'] // 配置密钥
- 使用session
1)打开routes中的index.js,添加session中间件如下
// 测试session, 记录访问次数
// session常用于登陆,存储用户信息(cookie对应), 用户访问次数作为用户信息
// cookie是登陆成功之后设置的,用户尚未登陆也可以设置cookie
// 例如:cookie: '123123' session:{'123123': {viewcount: 1}}
router.get('/session-test', async(ctx, next)=> {
// ctx.session
if (ctx.session.viewcount == null) {
// 用户尚未访问
ctx.session.viewcount = 0
}
// 用户已经访问过
ctx.session.viewcount++ // 递增
ctx.body = {
title: 'session-test',
viewCount: ctx.session.viewcount
}
})
2)访问‘localhost:3000/session-test’,结果如下
三、koa2实现登陆------模拟登陆
- users.js中
// 模拟登陆
router.get('/login-mock', async (ctx, next) => {
let str = '';
const query = ctx.query // url参数,querystring
if (query.username) {
// 模拟登陆成功
ctx.session.userInfo = {
username: query.username
}
str = 'login ok'
}else {
// 模拟登陆失败,不用处理session
str = 'login failed'
}
ctx.body = str
})
此时若url访问:‘localhost:3000/users/login-mock’返回结果是
若访问:‘localhost:3000/users/login-mock?username=aaa’,则返回
2. 模拟登陆验证
user.js中
// 模拟登陆验证
router.get('/login-check-mock', async(ctx, next) => {
ctx.body = ctx.session.userInfo || {}
})
1)访问‘localhost:3000/users/login-check-mock’
2)重新登陆:访问’localhost:3000/users/login-mock?username=aaa’ 之后,再重新访问‘localhost:3000/users/login-check-mock’