在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作为基础,并覆盖encode
, decode
, _get_session_key
, _set_session_key
等等。 您还必须确保cookie以相同的方式存储和encryption。
显然,为Express创build会话存储会更困难,它可以清理和清除Python对象。