mowatermelon / learn-es6

一个有趣的人写的有趣的前端基础
http://blog.iiwhy.cn/learn-es6
7 stars 5 forks source link

npm-koa-session #109

Open mowatermelon opened 4 years ago

mowatermelon commented 4 years ago

koa-session

官方仓库

https://github.com/koajs/session

image

官方npm地址

依赖包地址

https://www.npmjs.com/package/koa-session

在线运行地址

https://npm.runkit.com/koa-session

基础介绍

Simple session middleware for Koa. Defaults to cookie-based sessions and supports external stores.

用于Koa的简单会话中间件。默认为基于cookie的会话,并支持外部存储。

cookie名称由key选项控制,该选项默认为“ koa.sess”。所有其他选项都可以定义,ctx.cookies.get() 和 ctx.cookies.set()允许获取和设置相关配置。

基础安装

npm install koa-session --save   # npm
yarn add koa-session             # Yarn

基础使用

const session = require('koa-session');
const Koa = require('koa');
const app = new Koa();

app.keys = ['some secret hurr'];

const CONFIG = {
  key: 'koa.sess', /** (string) cookie key (default is koa.sess) */
  /** (number || 'session') maxAge in ms (default is 1 days) */
  /** 'session' will result in a cookie that expires when session/browser is closed */
  /** Warning: If a session cookie is stolen, this cookie will never expire */
  maxAge: 86400000,
  autoCommit: true, /** (boolean) automatically commit headers (default true) */
  overwrite: true, /** (boolean) can overwrite or not (default true) */
  httpOnly: true, /** (boolean) httpOnly or not (default true) */
  signed: true, /** (boolean) signed or not (default true) */
  rolling: false, /** (boolean) Force a session identifier cookie to be set on every response. The expiration is reset to the original maxAge, resetting the expiration countdown. (default is false) */
  renew: false, /** (boolean) renew session when session is nearly expired, so we can always keep user logged in. (default is false)*/
  secure: true, /** (boolean) secure cookie*/
  sameSite: null, /** (string) session cookie sameSite options (default null, don't set it) */
};

app.use(session(CONFIG, app));
// or if you prefer all default config, just use => app.use(session(app));

app.use(ctx => {
  // ignore favicon
  if (ctx.path === '/favicon.ico') return;

  let n = ctx.session.views || 0;
  ctx.session.views = ++n;
  ctx.body = n + ' views';
});

app.listen(3000);
console.log('listening on port 3000');