Monogoose保存Express Session
-
Monogoose保存Express Session
首先確定您是否有安裝Node.js
本專案基於nodejs + express
在網站應用來看Session是記錄用戶的狀態機制,不同於Cookie保存於瀏覽器中,Session是保存於服務端。
所以我們透過express session 所定義好的中間件來進行操作。 至於詳細的Session說明請至wiki上了解吧!
express-session中間件
express-session中間件將會話數據存儲在服務器上;它僅將會話標識(而非會話數據)保存在 cookie 中。從1.5.0版本開始, express-session不再依賴cookie-parser,直接通過req/res讀取/寫入;默認存儲位置內存存儲(服務器端)。
安裝:
<span></span>npm install express-session
通過option來設置session存儲,除了session ID外,session中的任何數據都不存儲在cookie中。
1. name - cookie的名字(原屬性名為 key)。(默認:’connect.sid’)
2. store - session存儲實例
3. secret - 用它來對session cookie簽名,防止篡改
4. cookie - session cookie設置 (默認:{ path: ‘/‘, httpOnly: true,secure: false, maxAge: null })
5. genid - 生成新session ID的函數 (默認使用uid2庫)
6. rolling - 在每次請求時強行設置cookie,這將重置cookie過期時間(默認:false)
7. resave - 強制保存session即使它並沒有變化 (默認: true)
8. proxy - 當設置了secure cookies(通過”x-forwarded-proto” header )時信任反向代理。當設定為true時,
”x-forwarded-proto” header 將被使用。當設定為false時,所有headers將被忽略。當該屬性沒有被設定時,將使用Express的trust proxy。
9. saveUninitialized - 強制將未初始化的session存儲。當新建了一個session且未設定屬性或值時,它就處於
未初始化狀態。在設定一個cookie前,這對於登陸驗證,減輕服務端存儲壓力,權限控制是有幫助的。(默認:true)
10. unset - 控制req.session是否取消(例如通過 delete,或者將它的值設置為null)。這可以使session保持存儲
狀態但忽略修改或刪除的請求(默認:keep)express-session 方法:
1. Session.destroy():刪除session,當檢測到客戶端關閉時調用。
2. Session.reload():當session有修改時,刷新session。
3. Session.regenerate():將已有session初始化。
4. Session.save():保存session。接下來代碼教您如何簡單的建立專案並且保存於mongodb內,請先打開本地的mongodb並且安裝以下插件
安裝:
npm install mongoose npm install connect-mongo
代碼:
var express = require('express'); var session = require('express-session'); var mongoose = require('mongoose'); const MongoStore = require('connect-mongo')(session); //mongodb mongoose.Promise = global.Promise; //db options let options = { server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } }, replset: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } } }; //mongodb connection mongoose.connect('mongodb://127.0.0.1:27017/test', options); let db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); var app = express(); // Use the session middleware app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: false, cookie: { maxAge: 7 * 24 * 3600 * 1000 // 保存一週 }, store: new MongoStore({ mongooseConnection: mongoose.connection, }) })); app.get('/', function (req, res) { var sess = req.session//取得session if (sess.views) { sess.views++ res.setHeader('Content-Type', 'text/html') res.write('<p>歡迎第 ' + sess.views + '次進入本站 </p>') res.end(); } else { sess.views = 1 res.end('welcome to the session demo. refresh!') } }); app.listen(3000);
以上是簡單保存Session的教學。
James Chiu
Email:208337456@qq.com
-
先收藏日後用到可以參考
樓主對於node.js的應用了解不少,有機會在向樓主請教
-
歡迎請教相關問題謝謝
-
請問這樣跟直接建 sessions collection 有什麼不同?
-
-
了解,先收藏起來下次有需要再來試試
-