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

我想用一些login用户创build一个Django应用程序。 另一方面,因为我想要一些实时function,我想使用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会话应用程序。

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

您将不得不为Express或Django编写自定义会话存储。 Django在默认情况下(以及在django-redis-sessions中)将会话存储为pickled Python对象。 以JSONstring将Express会话存储 使用connect-redis,Express将会话存储在redis中的关键字sess:sessionId中,而Django(不完全确定这一点)似乎将它们存储在关键字sessionId 。 你也许可以使用django-redis-sessions作为基础,并覆盖encodedecode_get_session_key_set_session_key等等。 您还必须确保cookie以相同的方式存储和encryption。

显然,为Express创build会话存储会更困难,它可以清理和清除Python对象。