返回

Egg.js Cookie与Session详细解析

前端

Cookie和Session是两种常见的HTTP状态管理技术,在Egg.js中,可以使用app.cookie()方法来对Cookie进行增删改查,同时也可以通过app.config.cookie来配置Cookie的加密方式。

一、Cookie的增删改查和配置加密

  1. Cookie的简单了解

Cookie是一种存储在用户浏览器端的文本文件,它通常用于存储用户登录信息、购物车内容等数据。Cookie可以通过HTTP头中的Set-Cookie字段来设置,也可以通过JavaScript代码来设置。

  1. Cookie的增加操作

其实egg已经为我们准备好了操作Cookie的方法。直接使用就可以了。

/app/controller/cookie.js
module.exports = app => {
  app.get('/cookie/add', async ctx => {
    // 设置 cookie
    ctx.cookies.set('name', 'egg');
    // 重定向到主页
    ctx.redirect('/');
  });
};
  1. Cookie的删除操作

删除Cookie也很简单,只需要使用ctx.cookies.remove()方法即可。

/app/controller/cookie.js
module.exports = app => {
  app.get('/cookie/remove', async ctx => {
    // 删除 cookie
    ctx.cookies.remove('name');
    // 重定向到主页
    ctx.redirect('/');
  });
};
  1. Cookie的修改操作

修改Cookie也很简单,只需要使用ctx.cookies.set()方法重新设置Cookie即可。

/app/controller/cookie.js
module.exports = app => {
  app.get('/cookie/modify', async ctx => {
    // 修改 cookie
    ctx.cookies.set('name', 'eggjs');
    // 重定向到主页
    ctx.redirect('/');
  });
};
  1. Cookie的查询操作

查询Cookie也很简单,只需要使用ctx.cookies.get()方法即可。

/app/controller/cookie.js
module.exports = app => {
  app.get('/cookie/query', async ctx => {
    // 获取 cookie
    const name = ctx.cookies.get('name');
    // 重定向到主页
    ctx.redirect('/');
  });
};
  1. Cookie的配置加密

Egg.js默认情况下并没有对Cookie进行加密,如果需要对Cookie进行加密,则需要在config.js中配置cookie.encrypt的值为true。

/config/config.default.js
module.exports = {
  // cookie 加密
  cookie: {
    encrypt: true,
  },
};

二、Session的使用

Session是一种存储在服务器端的文本文件,它通常用于存储用户登录信息、购物车内容等数据。Session可以通过中间件来使用,也可以通过API来使用。

  1. Session中间件的使用

Session中间件的使用非常简单,只需要在app.js文件中添加以下代码即可。

// app/app.js
module.exports = app => {
  app.use(app.middleware.session());
};
  1. Session API的使用

Session API的使用也非常简单,只需要使用app.session.get()方法和app.session.set()方法即可。

/app/controller/session.js
module.exports = app => {
  app.get('/session/get', async ctx => {
    // 获取 session
    const name = ctx.session.get('name');
    // 重定向到主页
    ctx.redirect('/');
  });

  app.get('/session/set', async ctx => {
    // 设置 session
    ctx.session.set('name', 'egg');
    // 重定向到主页
    ctx.redirect('/');
  });
};

三、Cookie和Session的比较

Cookie和Session都是HTTP状态管理技术,但它们之间也存在着一些差异。

特性 Cookie Session
存储位置 浏览器端 服务器端
大小限制 4KB 无限制
安全性 相对不安全 相对安全
使用场景 用户登录信息、购物车内容等数据 用户登录信息、购物车内容等数据

四、总结

Cookie和Session都是非常重要的HTTP状态管理技术,在Egg.js中,可以使用app.cookie()方法来对Cookie进行增删改查,同时也可以通过app.config.cookie来配置Cookie的加密方式。此外,还可以使用Session中间件和Session API来管理Session数据。