2015-01-06 33 views
2

我想了解req.cookies和req.session.cookie之間的區別。我在Node.js Express中使用Passport進行身份驗證。Node Express - req.cookies和req.session.cookie之間的區別

如果我登錄我的兩行代碼:

console.log('cookies',req.cookies); 
console.log('session',req.session); 

我得到這樣的輸出:

cookies { 'mysite.sid.uid.whatever': 's:Ltko5IdDgsAISG0smrKNYaeIVy8nbBzF.MkGmpnf6uUKITIAgN4ws3YXqxJrMaeeSCzlKdjQnqfI' } 
session { cookie: 
    { path: '/', 
    _expires: null, 
    originalMaxAge: null, 
    httpOnly: true, 
    secure: false }, 
    views: 8, 
    passport: {} } 

我使用這個配置:

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded()); 
app.use(busboyBodyParser()); 
//app.use(busboy()); 
app.use(cookieParser('cookie parser secret')); 
app.use(session({ 
    secret: process.env["SESSION_SECRET"], 
    saveUninitialized: true, // (default: true) 
    resave: true, // (default: true) 
    store: require('mongoose-session')(mongoose), 
    maxAge: 60000, 
    key: "mysite.sid.uid.whatever", 
    cookie: {secure: false} 
})); 

我不真正知道使用會話或cookie之間的區別,只是cookie僅在客戶端,會話可以是cl客戶端或服務器端。我幾次閱讀了Passport.js的文檔,但我仍然不太明白這裏發生了什麼。有人能幫我解釋一下嗎?據我所知,最好使用Redis使用服務器端會話。但是我沒有看到最終如何擺脫使用客戶端數據。在某些時候,你必須依賴存儲的客戶端數據嗎?

在我使用快速應用程序登錄後,護照對象將填充一個用戶字段,其中MongoDB爲objectid。

passport: { user: 549290b8246f0e1408e48b13 } } 

回答

1

通常,您在使用瀏覽器時將使用cookie。例外情況是通過HTTP頭或POST參數令牌進行身份驗證,例如API請求更爲典型。

確實,您可以使用cookie來完成客戶端或服務器端會話,其中整個會話數據存儲在前者的cookie中(並且不使用任何存儲服務器端)或會話數據存儲在服務器端, (後面的會話ID存儲在客戶端cookie中)。

req.cookies僅包含cookie值,不管cookie是否與會話相關。 req.session.cookie包含在客戶端會話ID cookie中使用的Set-Cookie參數。