我想用一些登录用户创建一个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应用程序。
那么,这是个好主意吗?不会有什么问题吗?特别是关于密钥,我不确定它们是否将共享相同的会话。
您将必须为Express或Django编写自定义会话存储。Django默认情况下(以及django-redis- sessions中)将会话存储为腌制的Python对象。Express将会话存储为JSON字符串。Express,带有connect- redis,sess:sessionId将会话存储在redis 的密钥下,而Django(对此不太确定)似乎将它们存储在key下sessionId。你也许能够使用的Django的Redis的会话作为一个基地,覆盖encode,decode,_get_session_key,_set_session_key和其他人也许只有几。您还必须确保以相同的方式存储和加密cookie。
sess:sessionId
sessionId
encode
decode
_get_session_key
_set_session_key
显然,为Express创建一个可以腌制和释放Python对象的会话存储将变得更加困难。