1.cookie是存储于访问者的计算机中的数据,用于同一浏览器访问同一域的时候共享数据
2.HTTP是无状态协议。也就是说:当你浏览了一个页面,然后跳转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每次的访问是没有关系的,也就是说服务器无法检测到这个状态
特点:保存在客户端、用于同一浏览器访问同一个域的时候共享数据
作用,例如:
1.保存用户信息
2.浏览历史记录
3.10天免登录
----------------------------------------------
1.koa中设置cookie的值
1.设置cookie:
router.get('/', async (ctx, next) => {
ctx.cookies.set("userInfo","gouzi",{
maxAge:1000*60*60
})
await ctx.render('index', {
title: 'Hello Koa 啊啊啊啊!'
})
})
2.获取cookie:
let userInfo = ctx.cookies.get("userInfo");
cookie的参数.png
3.存储值为汉字的cookie(nodejs的cookie是不支持直接存储汉字的)
先转化为buffer(let a = new Buffer("张三"))
router.get('/', async (ctx, next) => {
let name = new Buffer("狗子").toString('base64')
ctx.cookies.set("userInfo",name,{
maxAge:1000*60*60
})
})
再转化为汉字字符串(.toString())
router.get('/test', async (ctx, next) => {
//从ctx里面获取get传值,query是格式化之后的,querystring是字符串的
console.log(ctx.query)
let userInfo = ctx.cookies.get("userInfo");
let name = new Buffer(userInfo,'base64').toString()
console.log(name)
//ctx里面的request对象是那一大串东西
ctx.body = 'koa2 string'
})
------------------------------------------------------------
session是另一种记录客户状态的机制,不同的是cookie存储在客户短,session存储在服务器端。
session的运行机制:浏览器访问服务器并第一次发送请求时,服务器端会创建一个session对象,类似于key-value的结构,然后把key以cookie的形式存储在客户端,浏览器后续每次请求服务器时都会带上这个key(也就是cookie),服务器根据这个key来查找相应的value,也就是session。客户的信息都存储在session中
koa session的使用(包名:koa-session):
1.安装
npm install koa-session
2.引入
const session = require('koa-session')
3.配置
app.keys = ['some secret hurr']; /* cookie的签名 */
const CONFIG = {
key: 'koa:sess', /* 默认的cookie签名 */
maxAge: 86400000,/* cookie的最大过期时间 */
autoCommit: true, /** (boolean) automatically commit headers (default true) */
overwrite: true, /** 无效属性 */
httpOnly: true, /** (boolean) httpOnly or not (default true) */
signed: true, /** 默认签名与否 */
rolling: false, /** 每次请求强行设置cookie */
renew: false, /** cookie快过期时自动重新设置*/
};
app.use(session(CONFIG, app));
4.使用
router.get('/buy', async (ctx, next)=> {
console.log(ctx.session.username) //读取session
ctx.body = 'this is a users response!'
})
router.get('/login', function (ctx, next) {
ctx.session.username="狗子" //设置session
ctx.body = '登陆成功'
})
网友评论