Cookie
cookie 是存储于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域 名的时候共享数据。
HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页 面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何 关系的。
const Koa = require('koa')
const router = require('koa-router')()
const app = new Koa()
router.get('/', (ctx) => {
ctx.cookies.set('userinfo', 'zhangsan',{
maxAge: 60*1000*60,
path: '/news'
})
ctx.body = '这是首页'
})
router.get('/news', (ctx) => {
const userinfo = ctx.cookies.get('userinfo')
ctx.body = userinfo
})
app.use(router.routes())
.use(router.allowedMethods)
app.listen(3000)
效果截图
image.png
cookie options参数列表
image.png
Session
- session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而session保存在服务器上
- 当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对,然后将key(cookie)返回到浏览器(客户端),浏览器再次再访问时,携带key(cookie),找到对应的session(value)。客户的信息都保存在session中。
// 安装
npm install koa-session --save
// app.js
const Koa = require('Koa')
const router = require('koa-router')()
const session = require('koa-session')
const app = new Koa()
app.keys = ['basketball']
const CONFIG = {
key: 'koa:sess', //cookie key (default is koa:sess)
maxAge: 86400000, // cookie 的过期时间 maxAge in ms (default is 1 days)
overwrite: true, //是否可以 overwrite (默认 default true)
httpOnly: true, //cookie 是否只有服务器端可以访问 httpOnly or not (default true)
signed: true, //签名默认 true
rolling: false, //在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false)
renew: false, //(boolean) renew session when session is nearly expired,
}
app.use(session(CONFIG, app))
router.get('/', (ctx) => {
ctx.session.userInfo = 'kobe bryant'
ctx.body = '首页'
})
router.get('/news', (ctx) => {
ctx.body = ctx.session.userInfo
})
app.use(router.routes())
.use(router.allowedMethods())
app.listen(30001)
Cookie和Session区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上
- cookie不是很安全,别人可以分析放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能方面
- 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie