2012-02-22 1 views
6

Я хочу создать приложение Django с некоторыми зарегистрированными пользователями. С другой стороны, поскольку мне нужны некоторые возможности в реальном времени, я хочу использовать приложение Express.js.Совместное использование хранилища сеансов в Redis для 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 приложения.

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

+0

Вам определенно придется написать пользовательский обработчик для выражения или jjango, чтобы синхронизировать, как они кодируют файл cookie, как они сопоставляют идентификатор сеанса в cookie с ключом redis и как они сопоставляют значение redis для сеанса , –

+0

Хех, так что нет способа заставить его работать из коробки? Я хотел бы получить мнение о том, что кто-то работал с обеими системами (возможно, у вас есть, я не знаю :)). –

+1

Конечно, вам не нужно доверять мне. Я никогда не работал с django-redis-session. Но я много работал с Express и Django. Но это ни здесь, ни там, потому что это факт, что экспресс-сеансы - это JSON, а сеансы Django - маринованные объекты Python. Так что это не сработает. Express хранит сеансы как 'sess: sessionId', и это не дикое предположение, что django-redis-session использует другую схему для сопоставления между клавишами redis и идентификаторами сеанса. –

ответ

3

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

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

+0

Спасибо большое! :) –

+2

Собственно, вы можете сериализовать сеансы Django в формате JSON с Django 1.5.3. См. Https://docs.djangoproject.com/en/1.5/topics/http/sessions/#session-serialization – Druska