关于koa session的设计

koa session的使用方式,官网给的例子

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');

按这个例子是最简单的工作机制,session的内容,包括配置都会存于cookie中,
使用这种方案的优点:

1.简单,服务端无需做任何存储,只需要做序列化和反序列化

2.方案支持无需做任何处理就是支持分布式,集群

缺点:
每个请求都需要携带所有数据,session缓存的数据太大就会有额外负担,要控制session的大小

其他可能的session需求

1.需要同个账号,后面登录的覆盖前面的,做到同个账号只允许一处登录

答:这个功能可以不需要改session,重新在程序做个map存储在线用户,加多一层判断做处理,如果需要支持集群,则使用redis维护map

2.同个浏览器支持多账号登录使用

答:采用cookie的session方案,在同浏览器,同域名路径下,只能存在一个同名cookie值的天然特性,使得该需求做不了,
解决方案只能是放弃cookie方案,采用信息存储在其他的头字段,然后客户端配合把session手动每次提交上去;这种改动对于那些原先
使用<img>标签src的图片,图片又是需要需要认证,都会产生影响。

3.如何获取非当前用户的session信息

答:按官方默认cookie机制的seesion是没办法拿到的,需要自己写程序记录或是扩展session

koa-session的扩展主要支持3个配置:

1.ContextStore,一个存储类,告诉koa-session如何get,set,destroy对应获取,设置,删除

2.store,一个存储实例,告诉koa-session如何get,set,destroy;store跟ContextStore只要存在一个即可,作用是一样的

3.externalKey,一个生成全局唯一键的函数,默认是uuid.v4,一般不建议改

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值