2016-06-21 59 views
9

我需要共享主域和所有子域之間的會話cookie。我有一個基於expressjs框架的兩個服務的NodeJS:如何配置應用程序可用的子域cookie?

// 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? <--------- 
    })); 

所以我的問題是什麼,我應該在blog.example.local會話配置寫入取得現有的example.local餅乾嗎?

編輯:爲@yeiniel建議,我應該只使用相同的配置爲blog.example.local類似如下:

// 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 
     }) 
    })); 

是否足夠或者我可以優化呢?

回答

6

基本上你需要兩樣東西:所有服務器上使用相同的設置(不只是Cookie設置,但所有的會話設置包括商店),並確保Cookie域配置點到站點之間的公共領域。

+0

所以我需要剛剛從'example.local'複製和粘貼設置'blog.example.local'? – Erik

+0

是的,就是這樣。 – yeiniel

1

我目前管理一個類似的設置 所有的應用程序有會議

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 
} 

相同的設置,您將無法使用localhost,讓您的會話數據,特別是如果應用程序在不同的服務器。 YOu將需要一個會話數據的中央存儲,所有應用都可以訪問。

+0

是的,我知道,我需要爲會話分開存儲,但現在我所有的子域駐留在同一臺機器上。所以基本的問題是關於會話配置,但感謝指點! @Lalit Goswami回答什麼? – Erik

+0

您的所有子域名不必位於同一臺計算機上。只有會話正在集中存儲。這些應用程序可以在任何數量的機器上。 此外,如何發送,如果子站點單獨或主域名下處理的Set-Cookie會決定。 – mayankbatra

2

我覺得你餅乾中間件屬性應該是這樣的,

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

blog.example.local

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

example.local

希望這項工作你。

+0

你確定嗎?我讀到,如果我需要共享所有常見域和子域的cookie,我需要使用'domain:「bexample.local」' – Erik

相關問題