登录(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
}
))
``
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?