您好,登錄后才能下訂單哦!
什么是session
session是保存在服務(wù)器端的會話。session的典型應(yīng)用場景是用戶登錄某網(wǎng)站之后,將其登錄信息放入session,在以后的每次請求中查詢相應(yīng)的登錄信息以確保該用戶合法。比如購物車等等經(jīng)典場景
為什么要使用session
談及session一般是在web應(yīng)用的背景之下,我們知道web應(yīng)用是基于HTTP協(xié)議的,而HTTP協(xié)議恰恰是一種無狀態(tài)協(xié)議。也就是說,用戶從A頁面跳轉(zhuǎn)到B頁面會重新發(fā)送一次HTTP請求,而服務(wù)端在返回響應(yīng)的時候是無法獲知該用戶在請求B頁面之前做了什么的。
而正是這種web動態(tài)化的需求,給HTTP協(xié)議提出了一個難題:一個無狀態(tài)的協(xié)議怎樣才能關(guān)聯(lián)兩次連續(xù)的請求呢?也就是說無狀態(tài)的協(xié)議怎樣才能滿足有狀態(tài)的需求呢?
此時有狀態(tài)是必然趨勢而協(xié)議的無狀態(tài)性也是木已成舟,因此我們需要一些方案來解決這個矛盾,來保持HTTP連接狀態(tài),于是出現(xiàn)了cookie和session。
session與cookie的關(guān)系
上面提到解決HTTP協(xié)議自身無狀態(tài)的方式有cookie和session。二者都能記錄狀態(tài),前者是將狀態(tài)數(shù)據(jù)保存在客戶端,后者則保存在服務(wù)端。
安全性
cookie將信息保存在客戶端,如果不進(jìn)行加密的話,無疑會暴露一些隱私信息,安全性很差,一般情況下敏感信息是經(jīng)過加密后存儲在cookie中,但很容易就會被竊取。而session只會將信息存儲在服務(wù)端,如果存儲在文件或數(shù)據(jù)庫中,也有被竊取的可能,只是可能性比cookie小了太多。
Session安全性方面比較突出的是存在會話劫持的問題,這是一種安全威脅,總體來講,session的安全性要高于cookie。
express框架之session 內(nèi)存存儲
express-session 是基于express框?qū)iT用于處理session的中間件。session的認(rèn)證機(jī)制離不開cookie,需要同時使用cookieParser 中間件。
var express = require('express'); var session = require('express-session'); var cookieParser = require('cookie-parser'); var app = express(); app.use(cookieParser()); app.use(session({ secret: '12345', name: 'testapp', //這里的name值得是cookie的name,默認(rèn)cookie的name是:connect.sid cookie: {maxAge: 80000 }, //設(shè)置maxAge是80000ms,即80s后session和相應(yīng)的cookie失效過期 resave: false, saveUninitialized: true, })); app.get('/awesome', function(req, res){ if(req.session.lastPage) { console.log('Last page was: ' + req.session.lastPage + "."); } req.session.lastPage = '/awesome'; //每一次訪問時,session對象的lastPage會自動的保存或更新內(nèi)存中的session中去。 res.send("You're Awesome. And the session expired time is: " + req.session.cookie.maxAge); }); app.get('/radical', function(req, res){ if (req.session.lastPage) { console.log('Last page was: ' + req.session.lastPage + "."); } req.session.lastPage = '/radical'; res.send('What a radical visit! And the session expired time is: ' + req.session.cookie.maxAge); }); app.get('/tubular', function(req, res){ if (req.session.lastPage){ console.log("Last page was: " + req.session.lastPage + "."); } req.session.lastPage = '/tubular'; res.send('Are you a suffer? And the session expired time is: ' + req.session.cookie.maxAge); }); app.listen(5000);
一旦我們將express-session中間件用use掛載后,我們可以很方便的通過req參數(shù)來存儲和訪問session對象的數(shù)據(jù)。req.session是一個JSON格式的JavaScript對象,我們可以在使用的過程中隨意的增加成員,這些成員會自動的被保存到option參數(shù)指定的地方,默認(rèn)即為內(nèi)存中去。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。