2016-06-21 86 views
9

Ho bisogno di condividere cookie di sessione tra il dominio principale e tutti i sottodomini. Ho due servizi nodejs basati sul framework expressjs:Come configurare l'applicazione come cookie di sottodominio disponibile?

// example.local 

    ... 
    app.use(session({ 
     cookie: { 
      domain: "example.local" 
     } 
     , key: 'sid' 
     , secret: '[my secret]' 
     , saveUninitialized: true 
     , resave: true 
     , store: new RedisStore({ 
      host: 'localhost', 
      port: 6379 
     }) 
    })); 

// blog.example.local 

    ... 
    app.use(session({ 
     // what should I write here? <--------- 
    })); 

Quindi la mia domanda è ciò che dovrebbe scrivo in configurazione della sessione di blog.example.local per avere accesso a biscotto di example.local esistente?

EDIT: come @yeiniel suggeriscono, dovrei usare lo stesso config per blog.example.local simile al seguente:

// blog.example.local 

    ... 
    app.use(session({ 
     cookie: { 
      domain: "example.local" 
     } 
     , key: 'sid' 
     , secret: '[my secret]' 
     , saveUninitialized: true 
     , resave: true 
     , store: new RedisStore({ 
      host: 'localhost', 
      port: 6379 
     }) 
    })); 

E 'abbastanza o io possa ottimizzarlo?

risposta

6

Fondamentalmente sono necessari due elementi: utilizzare le stesse impostazioni su tutti i server (non solo le impostazioni dei cookie ma tutte le impostazioni della sessione includono il negozio) e assicurarsi che il dominio dei cookie sia collegato al dominio comune tra i siti.

+0

Quindi devo solo copiare e incollare le impostazioni da 'example.local' a' blog.example.local'? – Erik

+0

sì, solo quello. – yeiniel

1

Attualmente sto gestione di una configurazione simile Tutte le applicazioni hanno le stesse impostazioni per la sessione

app.use(session({ 
store: redisStore, 
secret: config.secret, 
resave: true, 
rolling: true, 
saveUninitialized: false, 
name: config.cookie_name, 
cookie: { 
    domain: config.cookie_domain_name, \\ .website.tld 
    secure: false 
} 

Non sarà in grado di utilizzare localhost per mantenere i vostri dati di sessione, specialmente se le applicazioni sono su server diversi. È necessario disporre di una memoria centrale per i dati di sessione, a cui possono accedere tutte le app.

+0

Sì, so che ho bisogno di separare la memoria per la sessione, ma ora tutti i miei sottodomini si trovano su una singola macchina. Quindi la domanda di base era sulle configurazioni di sessione, ma grazie per il puntamento! Che cosa ne pensi di @Lalit Goswami rispondi? – Erik

+0

Non è necessario che tutti i sottodomini siano sullo stesso computer. Solo le sessioni vengono archiviate centralmente. Le app possono trovarsi su un numero qualsiasi di macchine. Inoltre, il modo in cui invii il Set-Cookie deciderà se i sottodomini sono trattati separatamente o sotto il dominio principale. – mayankbatra

2

Credo che la vostra biscotto attributo nel middleware dovrebbe essere così,

cookie: { 
     domain: ".example.local", 
     path:'/' 
} 

per blog.example.local e

cookie: { 
     domain: "example.local", 
     path:'/' 
} 

per example.local

Spero che questo lavoro tu.

+0

Sei sicuro? Ho letto che se ho bisogno di condividere cookie per tutti i domini e sottodomini comuni ho bisogno di usare 'domain:" bexample.local "' – Erik