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

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

我认为使用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应用程序。

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

最佳答案

您将必须为Express或Django编写自定义 session 存储。 Django默认情况下(以及django-redis-sessions中)将 session 存储为腌制的Python对象。 Express将 session 存储为JSON字符串。 Express和connect-redis一起,将 session 存储在redis的sess:sessionId键下,而Django(对此不太确定)似乎将它们存储在sessionId的键下。您可能可以使用django-redis-sessions作为基础,并覆盖encodedecode_get_session_key_set_session_key以及其他一些名称。您还必须确保以相同的方式存储和加密cookie。

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

关于python - 在Redis上为Django和Express.js应用程序共享 session 存储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9391275/

10-12 16:57
查看更多