koajs会话 - 会话存储在哪里?

时间:2015-04-17 06:08:50

标签: session koa

我正在使用this模块进行koajs会话。

我检查了源代码但我真的无法理解它。 我试图知道它在哪里保存会话数据,因为我看不到创建的文件,并且当服务器重新启动时,会话数据仍然存在。

我觉得它将数据保存在cookie本身中,然后我看到它创建了两个带有乱码文本的cookie。

现在,它是在cookie本身编码数据(不安全)还是以我不理解的方式将数据保存在服务器上?

2 个答案:

答案 0 :(得分:8)

根据koa-session库中的this section of code,会话数据被编码为JSON,然后编入base64,然后附加到cookie。

Session.prototype.save = function(){
  var ctx = this._ctx;
  var json = this.toJSON();
  var opts = ctx.sessionOptions;
  var key = ctx.sessionKey;
  // set expire into cookie value
  var maxAge = opts.maxAge || ONE_DAY;
  json._expire = maxAge + Date.now();
  json._maxAge = maxAge;
  json = encode(json);
  debug('save %s', json);
  ctx.cookies.set(key, json, opts); // <-- this is where the session is being saved
};

答案 1 :(得分:0)

我是通过发送带有

的Koa服务器this.session.passport.id来实现的
yield this.render('template',{id: this.session.passport.id});

并在客户端创建了一个存储id的cookie。 当服务器请求客户端时,我通过POST或GET发送带有请求的id通过路由解析:

public.get('/resource/:id',function* (){
 console.log('do stuff with your id'+this.params.id);
// for example you can check against the id of the passport user you stored in a database of logged in users ...
});

如果您使用护照工作人员,您应该考虑代币而不是ID,因为人们可以知道您的Facebook ID。因此,令牌是你喜欢用来发送的方式。

有一个StackOverflow问题可以帮助您找到自己的方式: nodejs passport authentication token