亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

express express-session的使用小結

2019-11-19 12:21:18
字體:
來源:轉載
供稿:網友

簡介

express-session是express中的一個處理session的中間件,可以說是express中最常見的中間件之一了.

由于會話管理依賴cookie的使用,所以它的api中有很多用于控制cookie的部分.

總的來說express-session有如下的特點:

  • session管理(基本功能)
  • cookie簽名
  • 可替換持久儲存模塊

本文中使用的版本為1.15.6.

安裝

npm install express-session --save

引入&使用

const express = require('express');const app = new express();const expressSession = require('express-session');// 使用express-sessionapp.use(expressSession({  secret:'hello world',// cookie簽名 這個屬性是必須的 具體配置和`cookie-parser`一樣  saveUninitialized:true, // 是否自動初始化 默認為true  resave:false,// 當用戶session無變化的時候依然自動保存  cookie:{ // cookie的信息具體操作和`cookie-parser`一樣    maxAge:1800000// 30分鐘后過期  },  rolling:true// 每次請求的時候覆寫cookie}))

會話簡介

在express-session文檔中有如下的一句說明:

Note Session data is not saved in the cookie itself, just the session ID. Session data is stored server-side.

Session中包含的數據不會保存在cookie中,僅僅是在cookie中保存了一個SessionId而已.實際的session的數據保存在服務端.

簡單理解就是一個Map,鍵對應的是session id值保存在cookie中,值對應的是用戶保存在服務端的數據.

api介紹

參數

創建express-cookie參數基本分為兩種.

  • 針對于cookie的設置
  • 針對于express-session的設置

cookie設置一覽:

app.use(expressSession({  secret:'hello world', // cookie 簽名必須有否則會報錯  cookie:{    domain:<參數>,    expires:<參數>,    httpOnly:<參數>,    path:<參數>,    sameSite:<參數>,    secure:<參數>,    maxAge:1800000  }}));

而這些對應的參數就是服務端對于cookie的寫入參數,至于各個參數是什么意思參考下面的文章:

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie

express-session部分設置:

app.use(expressSession({  secret:'hello world', // cookie 簽名必須有否則會報錯  genid:function (request) { // 用于替換掉默認ID生成的函數 第一個參數為reqeust    return '隨機id'  },  name:'connect.sid',// 每次響應中向cookie中起始的內容,默認起始為`connect.sid`,  proxy:true,// 對于cookie使用secure后,在傳遞的過程中相信反向代理服務器,默認為undefined只相信正向代理  resave:true,// 在一次會話中無論是否session被改變都會進行強制的儲存  rolling:true,// 在每次會話中的響應中都覆寫一次cookie,重置倒計時  saveUninitialized:true,// 將一個新創建還未修改的會話進行儲存,默認為true  store:object// 一個儲存對象,默認使用的是`MemoryStore`這個存儲器  unset:'keep'// 控制沒有設置`req.session`時候的行為(使用delete刪除或者賦值null),默認'keep'會話期間不會保留,'destroy'會話完成后刪除.}));

方法

request.session上掛載的session對象,除了有你添加的內容外,還有默認的方法存在:

req.session.regenerate(function(err) { // 調用這個方法從新生成一個新的會話,完成后觸發})req.session.destroy(function(err) { // 刪除這個會話,完成后觸發})req.session.reload(function(err) { // 從新加載session數據,完成后觸發回調})req.session.save(function(err) { // 使用當前內存中的數據保存到儲存器中 // 默認在會話結束的時候就會自動調用這個方法})req.session.touch() // 更新cookie中的maxAge,一般不需要手動操作,交由中間件

屬性

同樣的在session實例上也有很多屬性:

req.session.id // 保存唯一的會話id值,不可修改req.session.cookie // 以鍵值對的形式保存cookie的原始數據req.session.cookie.maxAge // 以毫秒的形式返回剩余存活時間req.sessionID // 保存唯一的會話id,只讀

一個簡單的例子

一個簡單的登錄例子:

const express = require('express');const app = new express();const expressSession = require('express-session');const userDb = new Map();app.use(expressSession({  secret:'hello world',  saveUninitialized:true,  resave:false,  cookie:{    maxAge:1800000  },  rolling:true,}));app.get('/login', (request, response) => {  const    id = request.query.id,    pwd = request.query.pwd;  if(id && pwd){    if(userDb.has(id+pwd)){      response.send('該用戶已登錄');    }else{      request.session.userId = id+pwd;      userDb.set(id+pwd,id);      response.redirect('/');    }  }else{    response.send('請輸入正確的帳號和密碼');  }});app.get('/logout',(request, response)=>{  const userId = request.session.userId;  request.session.destroy((err)=>{    if(err || !userDb.has(userId)){      response.send('登出失敗');    }else{      userDb.delete(userId);      response.send('登出成功');    }  });});app.get('/',(request, response)=>{  if(request.session.userId && userDb.has(request.session.userId)){    response.send(`歡迎回來${userDb.get(request.session.userId)}`);  }else{    response.send('還未登錄');  }});app.use((request, response) => {  response.send('404 not found');});app.listen(8888, '127.0.0.1');

在瀏覽器中依次輸入以下url來模擬登錄行為:

localhost:8888/localhost:8888/login?id=ASCll&pwd=123456localhost:8888/localhost:8888/logoutlocalhost:8888/

暗坑

我在chrome瀏覽器下運行上面的例子多次后發現一個問題,瀏覽器會進行預讀取網頁來提高性能,也就是說在瀏覽器中當我url輸入到如下的地方時:

localhost:8888/logo

根據我之間多次進入這個頁面瀏覽器會提前訪問這個頁面localhost:8888/logout,而導致服務器直接刪除session等到真正進入到頁面的時候已經是第二次加載頁面了,導致每次登出都顯示失敗.

希望有經驗的朋友能給出一個合理的解決方案.

注意

express-sessioncookie-parser一起使用的時候對于cookie的簽名必須一致.

express-session的存儲實例是可以更換的,默認使用MemoryStore只適合于測試和開發使用,生產環境必須要使用其他的儲存實例,否則會出現內存碎片問題,在官方文檔中給出了已經實現的接口,可以對接redis以及mongodb等數據庫.

該列表在官方文檔的最后:

npm地址

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性欧美视频videos6一9| 日韩男女性生活视频| 成人乱色短篇合集| 久久久中精品2020中文| 国内精品久久久久伊人av| 色999日韩欧美国产| 中文字幕精品一区二区精品| 久久久久北条麻妃免费看| 欧美一级高清免费| 亚洲精品欧美日韩专区| 国产成人精品视频| 欧美日韩国产精品| 欧美激情精品久久久久久蜜臀| 国内精品久久影院| 一区二区三区四区视频| 97香蕉超级碰碰久久免费的优势| 麻豆国产精品va在线观看不卡| 一本色道久久综合亚洲精品小说| 国产女人精品视频| 国产成人一区二区在线| 91精品国产乱码久久久久久蜜臀| 国产精品高清在线观看| 亚洲美女在线看| 欧美成人精品一区二区三区| 久久久www成人免费精品张筱雨| 成人黄色激情网| 91国产高清在线| 欧美一级片一区| 日韩最新免费不卡| 伊人伊成久久人综合网小说| 欧美日韩国产影院| 亚洲精品视频网上网址在线观看| 亚洲福利视频在线| 亚洲电影免费观看| 亚洲国产精品悠悠久久琪琪| 91精品国产综合久久久久久蜜臀| 91网站免费观看| 亚洲第一在线视频| 国产精品www色诱视频| 国产一区二区日韩精品欧美精品| 91精品国产自产在线观看永久| 亚洲经典中文字幕| 国模精品视频一区二区| 永久免费毛片在线播放不卡| 国产成人在线视频| 色综合色综合网色综合| 久久婷婷国产麻豆91天堂| 国外成人在线播放| 亚洲在线观看视频网站| 92国产精品视频| 亚洲欧美日韩综合| 久久久久久久久91| 亚洲人av在线影院| 国产91热爆ts人妖在线| 国产一区二区在线免费视频| 亚洲精品资源在线| 亚洲无亚洲人成网站77777| 日韩专区在线播放| 日韩欧美aaa| 久久全国免费视频| 亚洲人成网在线播放| 国产在线视频91| 日本精品一区二区三区在线| 美日韩在线视频| 久久这里有精品| 91国内免费在线视频| 国产在线观看一区二区三区| 亚洲白拍色综合图区| 日韩中文在线中文网三级| 国产精品尤物福利片在线观看| 日本欧美一级片| 色综合老司机第九色激情| 欧美精品制服第一页| 色噜噜亚洲精品中文字幕| 国产精品免费一区豆花| 91精品啪aⅴ在线观看国产| 黑人巨大精品欧美一区二区三区| 欧美性videos高清精品| 亚洲精品ady| 国产色综合天天综合网| 伊人伊人伊人久久| 亚洲国产日韩欧美在线99| 亚洲成人三级在线| 国产精品三级久久久久久电影| 欧美高跟鞋交xxxxxhd| 久久久久久久久久久免费| 久久精品免费播放| 91啪国产在线| 在线观看久久久久久| 亚洲xxxx做受欧美| 91免费人成网站在线观看18| 欧美中文在线免费| 欧美成人高清视频| 深夜精品寂寞黄网站在线观看| 日韩欧美国产一区二区| 欧美日本国产在线| 538国产精品一区二区在线| 色综合导航网站| 国产欧美日韩中文字幕| 亚洲男人天堂久| 国产亚洲激情在线| 国产精品高潮视频| 国产精品电影在线观看| 中文字幕日本精品| 中文字幕在线观看亚洲| 中文字幕无线精品亚洲乱码一区| 欧美精品做受xxx性少妇| 青草青草久热精品视频在线网站| 久久久久久久久91| 亚洲精品videossex少妇| 亚洲精品在线看| 午夜精品一区二区三区视频免费看| 亚洲精品视频免费| 91精品国产免费久久久久久| 久久九九有精品国产23| 国产午夜精品一区理论片飘花| 亚洲成人a**站| 7777精品久久久久久| 亚洲性69xxxbbb| 青青草国产精品一区二区| 九九久久综合网站| 日韩av在线电影网| 欧美肥老太性生活视频| 97视频在线观看免费高清完整版在线观看| 欧美性69xxxx肥| 欧美野外wwwxxx| 亚洲影视九九影院在线观看| 精品亚洲国产成av人片传媒| 91夜夜揉人人捏人人添红杏| 亚洲国产欧美久久| 精品国产精品三级精品av网址| 欧美一级在线亚洲天堂| 欧美在线一区二区三区四| 国产精品欧美在线| 国产成人中文字幕| 亚洲欧美国产精品久久久久久久| 国内精品久久久久久久久| 在线视频中文亚洲| 久久人人爽亚洲精品天堂| 欧美第一页在线| 成人激情视频小说免费下载| 欧美黑人性视频| 久久精品国产亚洲精品2020| 揄拍成人国产精品视频| 亚洲综合国产精品| 成人网中文字幕| 欧美另类高清videos| 日本精品久久久| 日韩大片免费观看视频播放| 美女性感视频久久久| 97视频在线观看视频免费视频| 亚洲精品久久久久久久久久久| 日本精品久久中文字幕佐佐木| 成人网在线视频| 欧美亚洲国产成人精品| 欧美激情2020午夜免费观看| 精品国内自产拍在线观看| 热re99久久精品国产66热| 7m精品福利视频导航| 亚洲裸体xxxx| 欧美极品美女视频网站在线观看免费| 欧美精品www在线观看| 欧美刺激性大交免费视频| 久久国产精品久久精品|