2012-02-22 9 views
6

voglio creare un'applicazione Django con un po 'gli utenti registrati. Da un altro lato, dal momento che voglio alcune funzionalità in tempo reale, voglio usare un'applicazione Express.js.Condivisione di un negozio di sessione su Redis di Django e un'applicazione Express.js

Ora, il problema è che io non voglio utenti unauthentified di accedere ai dati dell'applicazione Express.js. Quindi devo condividere un archivio di sessioni tra Express.js e le applicazioni Django.

ho pensato usando Redis sarebbe una buona idea, dal momento che le chiavi volatili sono perfetti per questo in forma, e ho già usare Redis per un'altra parte della domanda.

Nella domanda Express.js, avrei questo tipo di codice:

[...] 
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 
    } 
})) 
[...] 

Sul lato Django, mi piacerebbe pensare di utilizzare l'applicazione django-redis-session.

Quindi, questa è una buona idea? Non ci saranno problemi? Soprattutto per la chiave segreta, non sono sicuro che condivideranno le stesse sessioni.

+0

È necessario scrivere un gestore personalizzato per express o django, per sincronizzare il modo in cui codificano il cookie, come mappano l'identificativo di sessione nel cookie sulla chiave redis e come mappano il valore redis in una sessione . –

+0

Heh, quindi non c'è modo di farlo funzionare fuori dalla scatola? Mi piacerebbe avere l'opinione di qualcuno che ha lavorato con entrambi i sistemi (forse hai, non lo so :)). –

+1

Certo, non devi fidarti di me. Non ho mai lavorato con django-redis-session. Ma ho lavorato molto con Express e Django. Ma non è né qui né là, perché è un fatto che le sessioni Express sono JSON, e le sessioni di Django sono oggetti in Python decapitati. Quindi non funzionerà. Express memorizza le sessioni come 'sess: sessionId', e non è un'ipotesi che django-redis-session usi qualche altro schema per mappare tra le chiavi redis e gli id ​​di sessione. –

risposta

3

Si dovrà scrivere un negozio di sessione personalizzato sia per Express o Django. Django, per impostazione predefinita (così come nelle sessioni django-redis) memorizza le sessioni come oggetti Python decapitati. Express memorizza le sessioni come stringhe JSON. Express, con redis connect, memorizza le sessioni sotto la chiave sess:sessionId in redis, mentre Django (non ne sono assolutamente sicuro) sembra archiviarle sotto la chiave sessionId. Potreste essere in grado di utilizzare django-Redis sessioni come base, e sovrascrivere encode, decode, _get_session_key, _set_session_key e forse pochi altri. Dovresti inoltre assicurarti che i cookie siano memorizzati e crittografati allo stesso modo.

Ovviamente, sarà modo più difficile per creare un archivio di sessione per Express in grado di salamoia e oggetti Python deserializzare.

+0

Grazie mille! :) –

+2

In realtà, è possibile serializzare le sessioni di Django in formato JSON da Django 1.5.3. Vedi https://docs.djangoproject.com/en/1.5/topics/http/sessions/#session-serialization – Druska

Problemi correlati