nodejs的koa中cookie和session的使用,cookie和session的区别

本文详细介绍了Node.js中Cookie和Session的使用,包括如何在Koa框架下设置和获取Cookie,以及Session的配置和应用。同时,文章阐述了Cookie和Session的主要区别,如存储位置、安全性、生命周期等,并提到了在客户端禁用Cookie时的处理方案——URL地址重写。此外,还讨论了两者在实际应用场景中的选择,如登录验证、用户信息存储等。
摘要由CSDN通过智能技术生成

1.cookie是存储于访问者的计算机中的数据,用于同一浏览器访问同一域的时候共享数据
2.HTTP是无状态协议。也就是说:当你浏览了一个页面,然后跳转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站。每次的访问是没有关系的,也就是说服务器无法检测到这个状态

cookie特点:保存在客户端、用于同一浏览器访问同一个域的时候共享数据
作用,例如:
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的第三个对象里面参数
在这里插入图片描述
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'
})

2.koa session的使用(包名:koa-session):

session是基于cookie的原理

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的最大过期时间 */
  renew: true, /** cookie(session)快过期时自动重新设置*/
  rolling: false, /** 每次请求强行更新设置cookie(session),使他不过期 */
  httpOnly: true, /** 是否只有服务端能访问 */
  signed: true, /** 默认签名与否 */
  overwrite: true, /** 无效属性 */
  autoCommit: true, /** (boolean) automatically commit headers (default true) */
  
};
 
app.use(session(CONFIG, app));

4.使用


router.get('/login', function (ctx, next) {
  ctx.session.username="狗子"    //设置session
  ctx.body = '登陆成功'
})

router.get('/buy', async (ctx, next)=> {
  console.log(ctx.session.username) //读取session
  ctx.body = 'this is a users response!'
})

cookie和session的区别如下
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。

3、cookie 是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久的保持数据。

4、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。

5、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

6、session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了。
注:为这个用户创建的Cookie的名称是aspsessionid。这个Cookie的唯一目的就是为每一个用户提供不同的身份认证。

7、cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。

如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?
例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。

URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。

使用cookie和session的具体场景

一般来说,登陆验证信息,客户的私人信息,如姓名,电话等,应该放在Session中.Cookie则用于用户登陆网站时的自动登陆以及类似"购物车"的处理.使用Cookie保存信息时最好通过加密形式来保存数据,同时是否保存登陆信息,需要由用户自行选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值