我忙於構建一個包含3個不同子域的平臺 - example.com,auth.example.com和api.example.com。它們運行在服務器的不同端口上運行的3個獨立的NodeJS應用程序。跨節點應用共享Redis會話
這裏是代碼建立會話:
var session = require("express-session");
var redisStore = require("connect-redis")(session);
var redisClient = require("redis").createClient(config.redis);
app.use(session({
secret: config.server.secret,
store: new redisStore(config.redis),
client: redisClient,
resave: false,
saveUninitialized: false,
cookie: {
domain: "example.co.za",
httpOnly: false
}
}));
的配置是完全一樣的所有3個應用程序和他們坐在同一臺服務器上。出於某種原因,這些會話不會被共享。我似乎記得幾周前他們被分享了,現在情況已經破裂 - 我們有一種狡猾的懷疑,即當我們將所有流量從HTTP轉移到HTTPS時發生這種情況。這會打破會議嗎?我試圖在限制會話的情況下打開'httpOnly',但沒有運氣。
我已經運行redid-cli MONITOR
和會話,事實上,被保存在登錄(驗證應用程序),但沒有被其他應用程序檢索。當我將saveUninitialized
設置爲true時,保存請求來自所有3個應用程序 - 這表明它們已連接到相同的Redis Store。
任何幫助將是偉大的。
驗證被存儲什麼餅乾/每個客戶端發送,看看是否有任何區別。另外,還要檢查的頭文件(特別是'SET-Cookie'),並看看[這裏](http://stackoverflow.com/questions/7834228/set-cookie-for-domain-instead-of-subdomain-using-的NodeJS和-expressjs)。這也可能是一個太大的評論問題,但是你的認證和你的api端點需要會話有什麼原因嗎? – dvlsg
原來,下面的答案解決了我的問題。感謝您的幫助。只是爲了滿足好奇心任何 - 身份驗證是創造登錄後的會話,但隨後的API需要檢查,有一個會話的有效和允許訪問之前驗證裏面的數據。 – nickcorin