1. 程式人生 > >Express中的session使用

Express中的session使用

介紹

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('退出登入')
})