我正在使用NodeJS構建一個應用程序單頁,並且想要使用我的cookie會話(cookie-session npm)來驗證用戶是否已登錄。從我的節點服務器端我可以獲取並設置會話cookie,但我不知道如何從客戶端獲得。如何從客戶端訪問Cookie會話?
這是我如何從我的服務器端設置:
req.session.user_id = user[0]._id;
哪裏user[0]._id
我的用戶ID,我從我的MongoDB得到。
我正在使用NodeJS構建一個應用程序單頁,並且想要使用我的cookie會話(cookie-session npm)來驗證用戶是否已登錄。從我的節點服務器端我可以獲取並設置會話cookie,但我不知道如何從客戶端獲得。如何從客戶端訪問Cookie會話?
這是我如何從我的服務器端設置:
req.session.user_id = user[0]._id;
哪裏user[0]._id
我的用戶ID,我從我的MongoDB得到。
因此,讓我們假設你已經配置cookie-session
是這樣的:
var cookieSession = require('cookie-session');
app.use(cookieSession({
keys: ['secret']
}));
然後讓一些數據存儲在會話:
req.session.user_id = 123;
如果你在瀏覽器的開發工具看你會見2組曲奇:
express:sess = eyJ1c2VyX2lkIjoxMjN9
express:sess.sig = 01I_Rx2gACezZI1tdl2-NvxPq6w
曲奇express:sess
是base64編碼的。如果我們解碼它,我們得到{"user_id":123}
。瞭解會話數據存儲在cookie本身是非常重要的 - 這不僅僅是會話的ID。
其他cookie,express:sess.sig
是簽名。此簽名是使用密鑰生成的(本例中爲secret
),用於幫助防止篡改。任何人都可以輕鬆修改express:sess
,但除非他們也可以生成相應的express:sess.sig
,否則服務器將知道它已被更改。
所有這一切說,我建議你看看express-session
中間件。這也使用cookies,但它只使用它們來存儲會話ID。沒有數據存儲在cookie中,全部存儲在服務器上。這更類似於會話在大多數其他Web框架中的工作方式,但我無法確定哪種方法最適合您的需求。
默認情況下,無論您使用cookie的方式是否設置爲httponly
。您將能夠在瀏覽器的開發工具中驗證這一點。這意味着它包含在HTTP請求中,但不能通過客戶端JavaScript訪問。這是一種安全措施,旨在使惡意代碼更難以竊取cookie。您可以使用cookie-session
禁用此安全功能:
app.use(cookieSession({
httpOnly: false,
keys: ['secret']
}));
然後您就可以訪問使用document.cookie
這些cookie。
我重申這是一項安全措施,不推薦將其關閉。我不可能判斷這是否是您應用程序中的真正關注點。
從您的問題中不清楚您是否真的想要從cookie中解析出值或僅檢查其存在。如果你需要解析它,那麼你需要base64解碼相關的cookie值,然後JSON解碼它。
您可能會採用各種替代方法來保留Cookie httponly
。在不瞭解你將如何處理這些信息的情況下,它很難具體。如果您使用Express視圖(即模板呈現),那麼您可以完成模板中的所有工作。如果您處於SPA領域,那麼您可以使用AJAX請求收集相關信息。無論如何,您甚至可以使用另一個cookie爲您提供所需的信息,同時保持會話cookie安全。
會話是一個服務器的事情,你不能在客戶端訪問它,如果你的意思是cookie,那麼cookie不包含關於會話的任何事情,但是一個ID指向它。如果您想從客戶端的會話獲取信息,則必須創建一個請求,然後服務器將會話信息發回。
他正在討論'cookie-session'軟件包,它會將會話數據解密/密碼並將其存儲在客戶端設備上 – num8er