Express-session的使用

Session 簡單介紹

session 是另一種記錄客戶狀態的機制,不同的是 Cookie 保存在客戶端瀏覽器中,而 session 保存在服
務器上。

Session 的用途:

session 運行在服務器端,當客戶端第一次訪問服務器時,可以將客戶的登錄信息保存。 當客戶訪問其他頁面時,可以判斷客戶的登錄狀態,做出提示,相當於登錄攔截。
session 可以和 Redis 或者數據庫等結合做持久化操作,當服務器掛掉時也不會導致某些客戶信息(購物車)
丟失。

Session 的工作流程

當瀏覽器訪問服務器併發送第一次請求時,服務器端會創建一個 session 對象,生成一個類似於 key,value 的鍵值對,然後將 key(cookie)返回到瀏覽器(客戶)端,瀏覽器下次再訪問時,攜帶 key(cookie), 找到對應的 session(value)。 客戶的信息都保存在 session 中

express-session 的使用:

1.安裝 express-session 
cnpm install express-session --save
 
2.引入 express-session
var session = require("express-session");
 
3.設置官方文檔提供的中間件
app.use(session({
secret: 'keyboard cat',
resave: true, saveUninitialized: true
}))
4.使用
設置值 req.session.username = "張三"; 
獲取值 req.session.username
express-session 的常用參數:
app.use(session({
secret: '12345',
name: 'name',
cookie: {maxAge: 60000},
resave: false,
saveUninitialized: true }));
參數
作用
secret
一個 String 類型的字符串,作爲服務器端生成 session 的簽名。
name
返回客戶端的 key 的名稱,默認爲 connect.sid,也可以自己設置。
resave
強制保存 session 即使它並沒有變化,。默認爲 true。建議設置成 false。 don't save session if unmodified
saveUninitialized
強制將未初始化的 session 存儲。當新建了一個 session 且未設定屬性或值時,它就處於
 
未初始化狀態。在設定一個 cookie 前,這對於登陸驗證,減輕服務端存儲壓力,權限控制是有幫助的。(默 認:true)。建議手動添加。
cookie
設置返回到前端 key 的屬性,默認值爲{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }。
rolling
在每次請求時強行設置 cookie,這將重置 cookie 過期時間(默認:false)

express-session 的常用方法:
req.session.destroy(function(err) { /*銷燬 session*/ })
req.session.username='張三'; //設置 session 
req.session.username //獲取 session 
req.session.cookie.maxAge=0; //重新設置 cookie 的過期時間

負載均衡配置 Session,把 Session 保存到數據庫 裏面
1.需要安裝express-session 和 connect-mongo模塊 
2.引入模塊
var session = require("express-session");
const MongoStore = require('connect-mongo')(session); 
3.配置中間件
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
rolling:true,
cookie:{
        maxAge:100000
},
store: new MongoStore({
    url: 'mongodb://127.0.0.1:27017/student',
    touchAfter: 24 * 3600 // time period in seconds
})
}))

Cookie 和 Session 區別

1、cookie 數據存放在客戶的瀏覽器上,session 數據放在服務器上。
2、cookie 不是很安全,別人可以分析存放在本地的 COOKIE 並進行 COOKIE 欺騙 考慮到安全應當使用 session。
3、session 會在一定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能 考慮到減輕服務器性能方面,應當使用 COOKIE。
4、單個 cookie 保存的數據不能超過 4K,很多瀏覽器都限制一個站點最多保存 20 個 cookie。
 
demo:
/*
* 1.安裝  express-session

cnpm install express-session  --save
*
*
* 2.引入

 var session = require("express-session");

 3.設置官方文檔提供的中間件

 app.use(session({
     secret: 'keyboard cat',
     resave: false,
     saveUninitialized: true
 }))


4.使用

設置值
 req.session.username = "張三";

獲取值 req.session.username

* */

var express = require("express");
var app = express();

var session = require("express-session");

//配置中間件
app.use(session({
    secret: 'this is string key',   // 可以隨便寫。 一個 String 類型的字符串,作爲服務器端生成 session 的簽名


    name:'session_id',/*保存在本地cookie的一個名字 默認connect.sid  可以不設置*/
    resave: false,   /*強制保存 session 即使它並沒有變化,。默認爲 true。建議設置成 false。*/
    saveUninitialized: true,   //強制將未初始化的 session 存儲。  默認值是true  建議設置成true
    cookie: {
        maxAge:5000    /*過期時間*/

    },   /*secure https這樣的情況纔可以訪問cookie*/

    //設置過期時間比如是30分鐘,只要遊覽頁面,30分鐘沒有操作的話在過期

    rolling:true //在每次請求時強行設置 cookie,這將重置 cookie 過期時間(默認:false)


}))


app.get("/",function(req,res){

    //獲取sesssion


    if(req.session.userinfo){  /*獲取*/
        res.send('你好'+req.session.userinfo+'歡迎回來');

    }else{
        res.send('未登錄');
    }
});

app.get("/login",function(req,res){
    req.session.userinfo='張三222';
    res.send('登錄成功');
});

app.get("/news",function(req,res){

    //獲取sesssion
    if(req.session.userinfo){  /*獲取*/
        res.send('你好'+req.session.userinfo+'歡迎回來 news');
    }else{
        res.send('未登錄 news');
    }



});

app.listen(3000);
/*
 * 1.安裝  express-session

 cnpm install express-session  --save
 *
 *
 * 2.引入

 var session = require("express-session");

 3.設置官方文檔提供的中間件

 app.use(session({
 secret: 'keyboard cat',
 resave: false,
 saveUninitialized: true
 }))


 4.使用

 設置值
 req.session.username = "張三";

 獲取值 req.session.username

 * */

var express = require("express");
var app = express();

var session = require("express-session");

//配置中間件
app.use(session({
    secret: 'this is string key',   // 可以隨便寫。 一個 String 類型的字符串,作爲服務器端生成 session 的簽名
       name:'session_id',/*保存在本地cookie的一個名字 默認connect.sid  可以不設置*/
    resave: false,   /*強制保存 session 即使它並沒有變化,。默認爲 true。建議設置成 false。*/
    saveUninitialized: true,   //強制將未初始化的 session 存儲。  默認值是true  建議設置成true
    cookie: {
        maxAge:1000*30*60    /*過期時間*/

    },   /*secure https這樣的情況纔可以訪問cookie*/

    //設置過期時間比如是30分鐘,只要遊覽頁面,30分鐘沒有操作的話在過期

    rolling:true //在每次請求時強行設置 cookie,這將重置 cookie 過期時間(默認:false)
}))


app.get("/",function(req,res){

    //獲取sesssion
    if(req.session.userinfo){  /*獲取*/
        res.send('你好'+req.session.userinfo+'歡迎回來');

    }else{

        res.send('未登錄');
    }



});

app.get("/login",function(req,res){


    req.session.userinfo='張三222';
    res.send('登錄成功');
});

app.get("/loginOut",function(req,res){

    //req.session.cookie.maxAge=0;  /*改變cookie的過期時間*/
  //銷燬
    req.session.destroy(function(err){
        console.log(err);
    })
    res.send('退出登錄成功');
});

app.get("/news",function(req,res){

    //獲取sesssion
    if(req.session.userinfo){  /*獲取*/
        res.send('你好'+req.session.userinfo+'歡迎回來 news');
    }else{
        res.send('未登錄 news');
    }



});

app.listen(3000);
/*
 * 1.需要安裝 express-session 和 connect-mongo 模塊

 cnpm install express-session  --save

 cnpm install connect-mongo  --save


 2.引入

 var session = require("express-session");


 var  MongoStore  = require("connect-mongo")(session);


 3.設置官方文檔提供的中間件

 app.use(session({
     secret: 'keyboard cat',
     resave: false,
     saveUninitialized: true,

     store:new MongoStore({
         url: 'mongodb://127.0.0.1:27017/student',數據庫的地址
          touchAfter: 24 * 3600   time period in seconds
     })


 }))


 4.使用

 設置值
 req.session.username = "張三";

 獲取值 req.session.username

 * */

var express = require("express");
var app = express();

var session = require("express-session");


var  MongoStore  = require("connect-mongo")(session);

//配置中間件
app.use(session({
    secret: 'this is string key',   // 可以隨便寫。 一個 String 類型的字符串,作爲服務器端生成 session 的簽名
    name:'session_id',/*保存在本地cookie的一個名字 默認connect.sid  可以不設置*/
    resave: false,   /*強制保存 session 即使它並沒有變化,。默認爲 true。建議設置成 false。*/
    saveUninitialized: true,   //強制將未初始化的 session 存儲。  默認值是true  建議設置成true
    cookie: {
        maxAge:1000*30*60    /*過期時間*/

    },   /*secure https這樣的情況纔可以訪問cookie*/
    rolling:true,//在每次請求時強行設置 cookie,這將重置 cookie 過期時間(默認:false)
    store:new MongoStore({
            url: 'mongodb://127.0.0.1:27017/shop',  //數據庫的地址
            touchAfter: 24 * 3600   //time period in seconds  通過這樣做,設置touchAfter:24 * 3600,您在24小時內只更新一次會話,不管有多少請求(除了在會話數據上更改某些內容的除外)
    })


}))


app.get("/",function(req,res){

    //獲取sesssion

    if(req.session.userinfo){  /*獲取*/
        res.send('你好'+req.session.userinfo+'歡迎回來');

    }else{

        res.send('未登錄');
    }



});

app.get("/login",function(req,res){


    req.session.userinfo='張三222';
    res.send('登錄成功');
});

app.get("/loginOut",function(req,res){

    //req.session.cookie.maxAge=0;  /*改變cookie的過期時間*/


  //銷燬
    req.session.destroy(function(err){
        console.log(err);
    })
    res.send('退出登錄成功');
});

app.get("/news",function(req,res){

    //獲取sesssion


    if(req.session.userinfo){  /*獲取*/
        res.send('你好'+req.session.userinfo+'歡迎回來 news');

    }else{

        res.send('未登錄 news');
    }

});

app.listen(3000);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章