Express中的session使用
阿新 • • 發佈:2018-12-03
介紹
Session用於記錄客戶狀態的一種機制,不同於Cookie的是,Cookie儲存在客戶端,而Session則將資料儲存在伺服器上。
Session 的用途:
session 執行在伺服器端,當客戶端第一次訪問伺服器時,可以將客戶的登入資訊儲存。
當客戶訪問其他頁面時,可以判斷客戶的登入狀態,做出提示,相當於登入攔截。
session 可以和 Redis 或者資料庫等結合做持久化操作,當伺服器掛掉時也不會導致某些客戶資訊(購物車)丟失。
工作原理
當瀏覽器訪問伺服器併發送第一次請求時,伺服器端會建立一個 session 物件,生成一個類似於key,value 的鍵值對,然後將 key(cookie)返回到瀏覽器(客戶)端,瀏覽器下次再訪問時,攜帶 key(cookie),找到對應的 session(value)。 進而將存在session中的資訊返回到頁面上。
用法
1.專案中安裝express-session和connect-mongo
npm install express-session --save
npm install connect-mongo --save
2.程式碼中使用
var express = require('express'); var app = new express; app.listen('3000','127.0.0.1'); //引入express-session var session = require('express-session'); //引入connect-mongo用於express連線資料庫儲存session var mongoStore = require('connect-mongo')(session); //中介軟體使用session app.use(session({ //引數配置 secret:'luckystar',//加密字串 name:'userid',//返回客戶端key的名稱,預設為connect_sid resave:false,//強制儲存session,即使它沒有變化 saveUninitialized:true,//強制將未初始化的session儲存。當新建一個session且未設定屬性或值時,它就處於未初始化狀態。在設定cookie前,這對於登入驗證,減輕伺服器儲存壓力,許可權控制是有幫助的,預設為true cookie:{maxAge:50000}, rolling:true, //在每次請求時進行設定cookie,將重置cookie過期時間 store:new mongoStore({//將session資料儲存到mongo資料庫中 url:'mongodb://127.0.0.1/admin', //資料庫地址 touchAfter:24*3600 //多長時間往資料庫中更新儲存一次,除了在會話資料上更改了某些資料除外 }) })); app.get('/',(req,res) => { //獲取session if(req.session.username){ res.send('歡迎'+req.session.username+'回來'); }else{ res.send('未登入') } }) app.get('/login',(req,res) => { //設定session req.session.username = 'star'; res.send('登入成功') }) app.get('/loginOut',(req,res) => { //銷燬session //方法一,將cookie的時間設定為0,只有cookie中攜帶的資訊通過客戶端請求傳到伺服器,由對應的session接收session才起作用,cookie沒了session自然而然的將不起作用 req.session.cookie.maxAge = 0; //方法二destroy req.session.destroy((err) => { console.log(err) }) res.send('退出登入') })