我想创建一个具有一些登录用户的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作为基础,并覆盖encode
,decode
,_get_session_key
,_set_session_key
以及其他一些名称。您还必须确保以相同的方式存储和加密cookie。
显然,为Express创建一个可以腌制和释放Python对象的 session 存储将变得更加困难。
关于python - 在Redis上为Django和Express.js应用程序共享 session 存储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9391275/