I Koa Cookie
Cookie 简介
- cookie 是储存于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域名的时候共享数据 (储存在浏览器客户端)
- HTTP 是无状态协议。简单的说当你浏览了一个页面,然后转到同一个网站的另一个页面。服务器无法认识到这是同一个浏览器在访问同一个网站。每次的访问,都是没有任何关系的
- 为啥不用HTTP 因为是无状态协议 无法识别同一个人
- Cookie 可以保存用户信息
- Cookie 可以储存浏览记录 例如 猜你喜欢的功能
- Cookie 可以10天免登陆
- Cookie 可以多个页面的数据传递
- Cookie 可以实现购物车功能
Koa Cookie 使用
在koa中可以直接使用
ctx.cookies.set(name,value,[options])
通过options设置cookie name 的value
options 名称 | options值 |
---|---|
maxAge | 一个数字表示从Date.new() 得到的毫秒数 |
expires | Cookie 过期的Date |
path | Cookie 路径,默认是“/” |
domain | Cookie 域名 |
secure | 安全Cookie 默认false ,设置成true表示只有https可以访问 |
httpOnly | 是否只是服务器可访问 cookie,默认是true |
overwrite | 一个布尔值,表示是否覆盖以前设置的同名的coolie(默认是false)。如果是true,在同一个请求中设置相同名称的所有cookie(不管路径或者域) 是否在设置此cookie时从set-cookie 标头中过滤掉 |
- 配置:
//正常配置
ctx.cookies.set('userinfo', 'zhangsan', {
maxAge:60*1000*60;
//httpOnly:true;//true表示这个cookies只有服务器端可以访问,false表示客户端(js),服务器端都可以访问
//expires:'2020-1-1' //设置具体的时间
//path:'index'; //配置可以访问的页面 默认全部
//domain:''; //正常情况下不用设置。默认就是当前域下面的所有页面都可以访问
})
Koa中获取Cookie的值
ctx.cookies.get(‘name’)
例
const Koa = require("koa");
const router = require("koa-router")();
const bodyParser = require('koa-bodyparser');
const Koastaticcache = require("koa-static-cache");
const Swig = require("koa-swig");
const co = require("co");
const app = new Koa();
/*
配置koa-bodyparser
处理正文中的数据 post
*/
app.use(bodyParser())
/* 处理静态资源文件 */
app.use(Koastaticcache('./static', {
prefix: "/static",
gzip: true
}))
/* 设置模板引擎 */
app.context.render = co.wrap(Swig({
root: __dirname + '/views',
autoescape: true,
cache: false,
ext: 'html'
}));
router.get('/', async ctx => {
//正常配置
ctx.cookies.set('userinfo', 'zhangsan', {
maxAge:60*1000*60;
//httpOnly:true;//true表示这个cookies只有服务器端可以访问,false表示客户端(js),服务器端都可以访问
//expires:'2020-1-1' //设置具体的时间
//path:'index'; //配置可以访问的页面 默认全部
//domain:''; //正常情况下不用设置。默认就是当前域下面的所有页面都可以访问
})
})
/*
接收post提交的数据
*/
router.post('/doAdd', async ctx => {
//获取cookies数据
var userinfo = ctx.cookies.get('userinfo')
console.log(userinfo)
})
// 启动路由
app.use(router.routes());/* 启动路由 */
app.use(router.allowedMethods()); // 可以配置也可以不配置
app.listen(5055)
cookie 中无法设置中文解决方法
II Koa Session
Session简单介绍
session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中 ,而session保存在服务器中。session是基于cookie的
Session的工作流程
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于key,value的键值对,然后将key(cookie)返回到浏览器(客户)端。浏览器下次在访问时,携带key(cookie)。找到对应的session(value)。客户的信息都保存在session中
koa-session的使用
官方文档:https://www.npmjs.com/package/koa-session
- 安装 koa-session
npm install koa-session --save
- 引入koa-session
const session=require(‘koa-session’);
- 设置session中间件
app.keys = ['some secret hurr']; //cookie的签名
const CONFIG = {
key: 'koa.sess', /** 默认 */
maxAge: 86400000,/** cookie的过期时间 毫秒 【需要修改】*/
overwrite: true, /** 默认 */
httpOnly: true, /** true表示这个cookies只有服务器端可以访问,false表示客户端(js),服务器端都可以访问 */
signed: true, /** 默认 签名 */
rolling: false, /** 在每次请求时强行设置cookie,这将重置cookie 过期时间 (默认:false) */
renew: true, /** 会话快过期时续订会话,因此我们可以始终保持用户登录。(默认为false)【需要修改】*/
secure: true, /** (boolean) 安全cookie*/
sameSite: null, /** (string) 会话cookie sameSite选项(默认为空,不设置) */
};
app.use(session(CONFIG, app));
// or if you prefer all default config, just use => app.use(session(app));
使用
设置session
//ctx.session.key=value
ctx.session.name='张三'
获取session的值
//ctx.session.key
ctx.session.name
||| Koa Cookie和Koa Session的区别
- cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
- cookie 不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗 考虑到安全应用应当使用session
- session 可以放在 文件、数据库、或内存中都可以。