【发布时间】:2012-03-12 13:45:10
【问题描述】:
我想创建一个包含一些已登录用户的 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 编写一个自定义处理程序,以同步它们如何编码 cookie,它们如何将 cookie 中的会话标识符映射到 redis 键,以及它们如何映射一个会话的 redis 值。
-
嘿,所以没有办法让它开箱即用?我想听听曾经使用过这两种系统的人的意见(也许你有,我不知道:))。
-
当然,你不必相信我。我从未使用过 django-redis-session。但我在 Express 和 Django 方面做了很多工作。但这既不是这里也不是那里,因为 Express 会话是 JSON 是事实,而 Django 会话是腌制的 Python 对象。所以这行不通。 Express 将会话存储为
sess:sessionId,并且可以猜测 django-redis-session 使用其他方案在 redis 键和会话 ID 之间进行映射。 -
好吧,这就是我所期望的答案(解释为什么它不起作用)。如果您将此添加为答案,我会给您。 :)
标签: python django node.js redis express