Совместное использование хранилища сеансов в Redis для приложения Django и Express.js - PullRequest
7 голосов
/ 22 февраля 2012

Я хочу создать приложение 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 app.

Итак, это хорошая идея?Не будет ли проблем?Особенно в отношении секретного ключа, я не уверен, что они будут использовать одни и те же сеансы.

1 Ответ

3 голосов
/ 22 февраля 2012

Вам нужно будет написать собственное хранилище сеансов для Express или Django. Django по умолчанию (как и в django-redis-сеансах) сохраняет сеансы в виде маринованных объектов Python. Express хранит сессии в виде строк JSON. Express с помощью connect-redis хранит сеансы под ключом sess:sessionId в redis, в то время как Django (не совсем уверенный в этом), похоже, хранит их под ключом sessionId. Возможно, вы сможете использовать django-redis-session в качестве базы и переопределить encode, decode, _get_session_key, _set_session_key и, возможно, несколько других. Вам также необходимо убедиться, что файлы cookie хранятся и шифруются одинаково.

Очевидно, что будет гораздо сложнее создать хранилище сеансов для Express, которое может выбирать и удалять объекты Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...