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

2024-05-16

我想创建一个包含一些登录用户的 Django 应用程序。另一方面,由于我想要一些实时功能,所以我想使用 Express.js 应用程序。

现在的问题是,我不希望身份不明的用户访问 Express.js 应用程序的日期。因此,我必须在 Express.js 和 Django 应用程序之间共享会话存储。

我认为使用 Redis 是一个好主意,因为易失性密钥非常适合这种情况,而且我已经将 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 https://github.com/martinrusev/django-redis-sessions app.

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


您必须为 Express 或 Django 编写自定义会话存储。默认情况下,Django(以及 django-redis-sessions 中)将会话存储为 pickled Python 对象。 Express 将会话存储为 JSON 字符串。 Express 与 connect-redis 一起将会话存储在 key 下sess:sessionId在redis中,而Django(对此不太确定)似乎将它们存储在密钥下sessionId。您也许可以使用 django-redis-sessions 作为基础,并覆盖encode, decode, _get_session_key, _set_session_key也许还有其他一些。您还必须确保 cookie 以相同的方式存储和加密。

显然,为 Express 创建一个可以 pickle 和 unpickle Python 对象的会话存储将会困难得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Redis 上为 Django 和 Express.js 应用程序共享会话存储 的相关文章

随机推荐