基于nodejs平台的下一代web开发框架Koa---(Cookie和Session)---系列2

I Koa Cookie

Cookie 简介

  • cookie 是储存于访问者的计算机中的变量。可以让我们用同一个浏览器访问同一个域名的时候共享数据 (储存在浏览器客户端)
  • HTTP 是无状态协议。简单的说当你浏览了一个页面,然后转到同一个网站的另一个页面。服务器无法认识到这是同一个浏览器在访问同一个网站。每次的访问,都是没有任何关系的
  1. 为啥不用HTTP 因为是无状态协议 无法识别同一个人
  2. Cookie 可以保存用户信息
  3. Cookie 可以储存浏览记录 例如 猜你喜欢的功能
  4. Cookie 可以10天免登陆
  5. Cookie 可以多个页面的数据传递
  6. Cookie 可以实现购物车功能

Koa Cookie 使用

在koa中可以直接使用

ctx.cookies.set(name,value,[options])

通过options设置cookie name 的value

options 名称options值
maxAge一个数字表示从Date.new() 得到的毫秒数
expiresCookie 过期的Date
pathCookie 路径,默认是“/”
domainCookie 域名
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

  1. 安装 koa-session

npm install koa-session --save

  1. 引入koa-session

const session=require(‘koa-session’);

  1. 设置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的区别

  1. cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
  2. cookie 不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗 考虑到安全应用应当使用session
  3. session 可以放在 文件、数据库、或内存中都可以。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值