​Monogoose保存Express Session


  • Lv 1

    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的應用了解不少,有機會在向樓主請教


  • Lv 1

    @neo 

    歡迎請教相關問題謝謝


  • 註冊用戶

    請問這樣跟直接建 sessions collection 有什麼不同?


  • Lv 1

    @yea  

    hi yea

    NodeJS 並沒有特別實做Session 通常都使用第三方的插件,所以我這邊是介紹express+ express-session。


  • 註冊用戶

    @babto

    了解,先收藏起來下次有需要再來試試



  • @babto 樓主好文,先推在收藏。

    本帖下載内容已隐藏,请登入以查看隐藏内容!
    可以參考一下,順便幫忙推個文


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待