登录(cookie,session)
cookie和登录校验
cookie :存储在浏览器的一段字符串,最大5kb,每个域都有一个cookie,跨域不共享,格式如 k1=v1;k2=v2(可结构化)
cookie会随http请求传递给服务端
每次http请求,cookie都会随着传递到服务端
服务端可修改cookie再返回前端
默认,跨域不可传递cookie
服务端操作cookie
const http = require('http')
const server = http.createServer((req.res)=>{
1,设置cookie
res.setHeader('Set-Cookie','a=100')
ctx.cookie.set('a','100')
2,获取cookie
const cookieStr = req.headers.cookie
console.log('cookie is',cookieStr)
ctx.cookie.get('a')
3,结构化cookie (概念很重要)
//cookieStr:'a=100,b=200'-->{a:'100',b:'200'}
const cookieObj={}
cookieStr.split(';').forEach(cookieItemStr =>{
const arr = cookieItemStr.trim().split('=')
const key = arr[0] //a
const val = arr[1] //100
cookieObj[key]=val
}
console.log('cookie obj is ',cookieObj)
res.end('cookie test')
})
server.liseten(3000)
cookie如何用于登录校验
请求登录接口,成功则设置cookie,如user=zhangsan
前端再请求其他接口,就会带上上述cookie
服务端判断cookie 有无user=zhangsan ,即可验证

session
cookie不能暴露用户名
cookie中有user=zhangsan
cookie存放用户信息明文,非常危险
解决方案:cookie存放一个用户标识,如userId=123

session :用于登录,存储用户信息(cookie对应),用户访问次数作为用户信息
使用npm插件koa-generic-session
使用ctx.session
模拟登录
``
const session = require('koa-generic-session')
密钥
app.keys=['dafsfasd%%__fas5555']
自动配置cookie和session
app.use(session(
配置cookie
cookie{
cookie在根目录下有效
path:'/',
cookie只允许服务端来操作
httpOnly:true,
cookie的过期时间
maxAge:246060*1000
}
))
``

浙公网安备 33010602011771号