一尘不染

在Redis上为Django和Express.js应用程序共享会话存储

redis

我想用一些登录用户创建一个Django应用程序。另一方面,由于我需要一些实时功能,因此我想使用Express.js应用程序。

现在,问题是,我不希望未经身份验证的用户访问Express.js应用程序的数据。因此,我必须在Express.js和Django应用程序之间共享会话存储。

我认为使用Redis是个好主意,因为volatile键非常适合这种情况,而且我已经在应用程序的另一部分使用了Redis。

在Express.js应用程序上,我将具有以下代码:

[...]
this.sessionStore = new RedisStore;
this.use(express.session({
  // Private crypting key
  secret: 'keyboard cat', // I'm worried about this for session sharing
  store: this.sessionStore,
  cookie: {
    maxAge: 1800000
  }
}))
[...]

在Django方面,我会考虑使用django-redis-session应用程序。

那么,这是个好主意吗?不会有什么问题吗?特别是关于密钥,我不确定它们是否将共享相同的会话。


阅读 289

收藏
2020-06-20

共1个答案

一尘不染

您将必须为Express或Django编写自定义会话存储。Django默认情况下(以及django-redis-
sessions中)将会话存储为腌制的Python对象。Express将会话存储为JSON字符串。Express,带有connect-
redis,sess:sessionId将会话存储在redis
的密钥下,而Django(对此不太确定)似乎将它们存储在key下sessionId。你也许能够使用的Django的Redis的会话作为一个基地,覆盖encodedecode_get_session_key_set_session_key和其他人也许只有几。您还必须确保以相同的方式存储和加密cookie。

显然,为Express创建一个可以腌制和释放Python对象的会话存储将变得更加困难。

2020-06-20