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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM