Cookie,Session,Token【Codewhy NodeJS学习笔记】

本文介绍了在Web开发中解决HTTP无状态问题的方法,重点讲解了Cookie、Session和Token的概念及优缺点。内容涵盖Cookie的工作原理、Session的实现机制、Token(特别是JWT)的应用,以及非对称加密在Token验证中的作用。通过阅读,读者将能了解如何在NodeJS中实现安全的身份验证。
摘要由CSDN通过智能技术生成

为什么需要登录凭证?

  • web 开发中,我们使用最多的协议是 http,但是 http 是一个无状态的协议
    • 什么是无状态的协议?
  • 举个例子:
    • 我们登录了一个网站 www.coderhub.com
    • 登录的时候我们需要输入用户名和密码:比如用户名coderwhy,密码:Coderwhy666
    • 登陆成功之后,我们 要以 coderwhy 的身份去访问其他的数据和资源,还是通过 http 请求去访问
      • coderhub 服务器会问:你谁呀?
      • coderwhy 说:我是 coderwhy 呀,刚刚登录过呀
      • coderhub:怎么证明你刚刚登录过呀
      • coderwhy说:这。。。,http 没有告诉你吗
      • coderhub:http 的每次请求对我来说都是一个单独的请求,和之前的请求没有什么关系
  • 这就是 http 的无状态,也就是服务器不知道你上一步做了什么,我们必须得有一个办法可以证明我们登录过

认识 cookie

  • Cookie(复数形态Cookies),又称为“小甜饼”。类型为“小型文本文件”,某些网站为了辨别用户身份二存储在用户本地终端(Client Side)上的数据
    • 浏览器会在特定的情况下携带上cookie发送请求,我们可以通过cookie来获取一些信息
  • Cookie 总是保存在客户端中,按在客户端中的存储位置,Cookie 可以分为内存Cookie和硬盘Cookie
    • 内存Cookie由浏览器维护,保存在内存中,浏览器关闭时Cookie就会消失,其存在时间是短暂的
    • 硬盘Cookie保存在硬盘中,有一个过期时间,用户手动清理或者过期时间到时,才会被清理
  • 如何判断一个Cookie是内存Cookie还是硬盘Cookie?
    • 没有设置过期时间,默认情况下cookie是内存cookie,在关闭浏览器时会自动删除
    • 有设置过期时间,并且过期时间不为0或者复数的cookie,是硬盘cookie,需要手动或者到期时,才会删除
  • cookie 常见的属性:
    • cookie 的生命周期
      • 默认情况下的cookie是内存cookie,也称之为会话cookie,也就是在浏览器关闭时会自动删除
      • 我们可以通过 expire 或者 max-age 来设置过期时间
        • expire:设置的是 Date.toUTCString(),设置格式是 ;expire=date-in-GMTString-format
        • max-age:设置过期的秒钟,;max-age=max-age-in-seconds(例如一年为60*60*24*365)
    • cookie 的作用域:(允许 cookie 发送给哪些URL)
      • Domain:指定哪些主机可以接受 cookie
        • 如果不指定,那么默认是 origin ,不包括子域名
        • 如果指定 Domain ,则包含子域名,例如,如果设置 Domain=mozilla.org,则 Cookie 也包含在子域名中(如 developer.mozilla.org)
      • Path:指定主机下哪些路径可以接受 cookie
        • 例如,设置 Path=/docs,则以下地址都会匹配:
          • /docs
          • /docs/Web/
          • /docs/Web/HTTP
  • 客户端设置 cookie
    document.cookie = 'key=value'
    
  • 服务器端设置 cookie
    const Koa = require('koa')
    const Router = require('koa-router')
    const app = new Koa()
    
    const testRouter = new Router()
    
    testRouter.get('/test', (ctx, next) => {
         
      ctx.cookies.set('name', 'lilei', {
         
        maxAge: 5 * 1000,
      })
      ctx.body = 'test'
    })
    
    testRouter.get('/demo', (ctx, next) => {
         
      // 读取 cookie
      const value = ctx.cookies.get('name')
      ctx.body = `你的cookie是${
           value}`
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值