Express框架之session的基本使用

◆ 設置session:

我們使用express-session模塊來設置session

  1. 安裝express-session
cnpm install express-session --save
  1. 引入express-session模塊
const session=require("express-session");
  1. 設置session
session(options);

示例:

const express=require("express");
const session=require("express-session");
 
var app=express();
 
//配置中間件
app.use(session({
    secret: "keyboard cat",
     resave: false,
     saveUninitialized: true,
     cookie: ('name', 'value',{maxAge:  5*60*1000,secure: false})
}));
 
app.use('/login',function(req,res){
    //設置session
    req.session.userinfo='張三';
    res.send("登陸成功!");
});
 
app.use('/',function(req,res){
    //獲取session
    if(req.session.userinfo){
        res.send("hello "+req.session.userinfo+",welcome");
    }else{
        res.send("未登陸");
    }
});
 
app.listen(8080);

在session(option)中對session進行設置,它的主要參數是:

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, 建議設爲:false)
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)
◆ session的常用方法:
req.session.username="張三"
 
//獲取session
req.session.username
 
//重新設置cookie的過期時間
req.session.cookie.maxAge=1000;
 
//銷燬session
req.session.destroy(function(err){
     
})
◆ 演示通過銷燬session的方式來退出登錄:

當我們進入到主頁時,未顯示任何信息,進入login路由後,自動設置session,這是回到主頁則顯示session信息,之後進入loginOut路由已註銷session信息,再回到首頁顯示爲登陸。

const express=require("express");
const session=require("express-session");
 
var app=express();
 
//配置中間件
app.use(session({
    secret: "keyboard cat",
     resave: false,
     saveUninitialized: true,
     cookie: ('name', 'value',{ maxAge:  5*60*1000,
                                secure: false,
                                name: "seName",
                                resave: false})
}));
 
app.use('/login',function(req,res){
    //設置session
    req.session.userinfo='張三';
    res.send("登陸成功!");
});
 
app.use('/loginOut',function(req,res){
    //註銷session
    req.session.destroy(function(err){
        res.send("退出登錄!"+err);
    });
});
 
app.use('/',function(req,res){
    //獲取session
    if(req.session.userinfo){
        res.send("hello "+req.session.userinfo+",welcome to index");
    }else{
        res.send("未登陸");
    }
});
 
app.listen(8080);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章