登录(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
}
))
``

posted @   strawberry&cigarette  阅读(195)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示