memcached、session、cookie

371 阅读2分钟

读书笔记 每日一记:1

Memcached

缓存服务,可以用于存储session; 阿里云系列产品里面有

session

概述:

是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;

session 是如何工作的?

  • 每个 session 都对应一个 session_id,通过 session_id 可以查询到对应的 session
  • session_id 通常是存放在客户端的 cookie 中,服务端存好 session 之后将对应的 session_id 设置在 cookie 中发送给客户端
  • 当请求到来时,服务端检查 cookie 中保存的 session_id 并通过这个 session_id 与服务器端的 session 关联起来,进行数据的保存和修改

session 的储存有四个常用选项:内存、 cookie、缓存、数据库

  • 内存:开发环境存内存比较方便,问题是不能够共享状态(只能在本机访问)
  • cookie:使用 cookie 来储存 session 的话,session 保存在用户浏览器端,每次用户访问时,都会主动带上他自己的信息。安全性的话,只要遵照最佳实践来,也是有保证的。它的弊端是增大了数据量传输,好处是比较方便
  • 缓存:可以共享(Memcached)
  • 数据库:可以共享

cookie

概述:

是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。

什么是 Cookie

  • Cookie 就是浏览器储存在用户电脑上的一小段文本文件
  • Cookie 是纯文本格式,不包含任何可执行的代码
  • Cookie 由键值对构成,由分号和空格隔开
  • Cookie 虽然是存储在浏览器,但是通常由服务器端进行设置
  • Cookie 的大小限制在 4kb 左右

Cookie 是如何工作的:

  • 首先,我们假设当前域名下还是没有 Cookie 的
  • 接下来,浏览器发送了一个请求给服务器(这个请求是还没带上 Cookie 的)
  • 服务器设置 Cookie 并发送给浏览器(当然也可以不设置)
  • 浏览器将 Cookie 保存下来
  • 接下来,以后的每一次请求,都会带上这些 Cookie,发送给服务器

浏览器设置cookie

之后的请求里面带了cookie

参数配置

app.use(async(ctx, next) => {
ctx.cookies.set(
      'cid',//key
      'hello world', //value
      {
        domain: 'localhost', // 写cookie所在的域名
        path: '/index', // 写cookie所在的路径
        maxAge: 10 * 60 * 1000, // cookie有效时长
        expires: new Date('2017-02-15'), // cookie失效时间 有maxAge的时候 它是无效的
        httpOnly: false, // 是否只用于http请求中获取(如果为true,客户端不能修改)
        overwrite: false // 是否允许重写
      }
    )
})

参考: Cookie 在前端中的实践Cookie 和 Session 的使用简记