cookie一般用來存儲非關鍵信息 , 用戶名和密碼等敏感信息一般采用session 來存儲;cookie和session的最大區別是當服務器端存儲session 之后,用戶再次請求時候只是請求了一個sessionID,這樣敏感信息泄露的可能性就大大降低。但是session是基於cookie的,服務器首次接受到用戶請求之后, 會將信息生成一個sessionID,將sessionID返回給客戶端,后續所有的請求,都是發送這個sessionID給服務器。這就和你去商場辦卡之后只需要驗證手機號碼就可以享受優惠是一樣的道理。
在nodejs中 ,cookie的使用需要安裝第三方中間件 cookie-parser,而session的使用需要安裝第三方中間件express-session !
session的使用方法如下:
var app = express() ; app.set('trust proxy',1); app.use(session({ secret: 'keybord cat', //任意信息 resave : false, saveUninitialized:true, cookie: { secure:true } //必須是true })); 之后可以使用req.session 來獲取內容了
使用cookie實現的登錄控制如下
'use strict'; const express = require('express'); const path = require('path'); //引入bodyParser 來獲取用戶的登錄信息 const bodyParser = require('body-parser'); //引入cookie-parser 來記錄用戶的登錄信息 const cookieParser = require('cookie-parser'); const app = express(); //使用cookie來驗證用戶是否登錄 //邏輯 : 首先進入首頁面。然后點擊用戶中心 // 進入用戶中心的時候需要判斷是否已經登錄 //如果用戶已經登錄 則直接進入用戶中心頁面 。包含歡迎回來 ,注銷按鈕 //如果沒有登錄,則重定向到登錄頁面; //驗證賬戶密碼;如果正確; 則進入用戶中心, 否則返回登錄頁面 //使用第三方插件 cookieparser 和bodyParser app.use(cookieParser()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.get('/', (req, res) => { res.send('<p>歡迎來到首頁<a href="/user">用戶中心</a></p>'); }); //進入login頁面的時候需要直接發送login.HTML app.get('/login', (req, res) => { res.sendFile(path.join(__dirname, 'login.html')); }); //處理用戶輸入的信息 app.post('/signin', (req, res) => { let username = req.body.username; let pwd = req.body.pwd; if (username == 'admin' && pwd == '123') { //設置cookie res.cookie('isLogin', 1, { maxAge: 60000 }); //進入用戶中心頁面 res.redirect('/user'); } else { res.redirect('/login'); } }); app.get('/user', (req, res) => { // 進入用戶中心的時候需要判斷是否已經登錄 if (req.cookies.isLogin) { res.send('歡迎來到用戶中心<a href="/logout">注銷</a>') } else { res.redirect('/login'); } }) app.get('/logout', (req, res) => { res.clearCookie('isLogin'); res.send('注銷成功<a href="/user">返回</a>') }); app.listen(3001, (req, res) => { console.log('3001 port is on'); });
使用session實現簡單的登錄控制代碼如下
'use strict'; const express = require('express'); const path = require('path'); const bodyParser = require('body-parser'); const cookieParser = require('cookie-parser'); const session = require('express-session'); const app = express(); app.use(cookieParser()); app.use(bodyParser()); app.use(bodyParser.urlencoded({ extended: false })); app.use(session({ secret: 'qq', resave: false, saveUninitialized: true, cookie: {} })); //首頁面 app.get('/', (req, res) => { res.send('<h2>歡迎來到首頁點擊進入<a href="/user">用戶中心</a></h2>'); }); //處理登錄動作 app.post('/signin', (req, res) => { //獲取用戶名和密碼 let username = req.body.username; let pwd = req.body.pwd; if (username == 'admin' && pwd == '123') { req.session.isLogin = 1; req.session.username = username; res.redirect('/user'); } else { res.redirect('/login.html'); } }); //用戶中心 app.get('/user', (req, res) => { if (req.session.isLogin) { res.send(`<h2>${req.session.username},歡迎回來!<a href='/logout'>注銷</a></h2>`) } else { res.redirect('/login'); } }); //登錄頁面 app.get('/login', (req, res) => { //直接重定向到login.html res.sendFile(path.join(__dirname, 'login.html')); }); //注銷頁面 app.get('/logout', (req, res) => { req.session.destroy(); res.redirect('/'); }); app.listen(3000, () => { console.log('3000 port is on'); });
ps:沒有cookie session也沒法工作