最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js編程中客戶端Session的使用詳解

 更新時間:2015年06月23日 12:08:06   投稿:goldensun  
這篇文章主要介紹了Node.js編程中客戶端Session的使用詳解,是Node.js入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

 靜態(tài)網(wǎng)站很容易擴(kuò)展。你只需要全部緩存,不需要考慮從不同服務(wù)器組合有狀態(tài)的內(nèi)容給用戶。

可惜,大多數(shù)Web應(yīng)用使用有狀態(tài)的內(nèi)容提供個性化體驗(yàn)。如果你的應(yīng)用可以登錄,就需要記住用戶的Session。經(jīng)典的處理方法是客戶端設(shè)置包含隨機(jī)唯一Session標(biāo)識的Cookie,被標(biāo)識的Session數(shù)據(jù)保存到服務(wù)端。


擴(kuò)展有狀態(tài)服務(wù)

當(dāng)擴(kuò)展服務(wù)的時候,你肯定有三種選擇:

  1.     不同服務(wù)端同步Session數(shù)據(jù)
  2.     不同服務(wù)端連接單點(diǎn)中心(獲取Session)
  3.     保證用戶訪問同一個服務(wù)端

但都有缺陷:

  •     同步數(shù)據(jù)增加性能開銷
  •     單點(diǎn)中心降低系統(tǒng)擴(kuò)展性
  •     如果用戶上次訪問的服務(wù)端需要維護(hù)怎么辦

然而,如果你換個角度思考,會發(fā)現(xiàn)第四種選擇:將Session數(shù)據(jù)保存在客戶端


客戶端Session

在客戶端保存Session有一些優(yōu)勢:

  •     無所謂哪個服務(wù)端,Session數(shù)據(jù)都有效
  •     不需要維護(hù)服務(wù)端狀態(tài)
  •     不需要服務(wù)端同步
  •     任意添加新的服務(wù)端

但是客戶端Session存在一個嚴(yán)重問題:你不能保證用戶不篡改Session數(shù)據(jù)。


比如你在Cookie中保存用戶的ID。用戶很容易修改它,從而訪問別人的賬戶。

這似乎否定了客戶端Session的可能,但有一種方法可以巧妙解決這問題:加密打包Session數(shù)據(jù)(還是存在Cookie中)。這樣就不需要擔(dān)心用戶修改Session數(shù)據(jù),服務(wù)端會驗(yàn)證數(shù)據(jù)的。

實(shí)際應(yīng)用上,就是Cookie中保存一個加密的Server Key。Server Key驗(yàn)證后才有權(quán)利讀取和修改Session數(shù)據(jù)。這就是客戶端Session。


Node客戶端Session

Node.JS有一個庫可以實(shí)現(xiàn)客戶端Session:node-client-session.它可以代替Connect(一個Node中間件框架)內(nèi)置的session和cookieParser中間件。

在Express框架應(yīng)用中的使用:
 

const clientSessions = require("client-sessions"); 
app.use(clientSessions({ secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK' // 設(shè)置一個隨機(jī)長字符串! })

然后,向req.session對象添加屬性:
 

app.get('/login', function (req, res){ req.session.username = 'JohnDoe'; });

讀取屬性:
 

app.get('/', function (req, res){ res.send('Welcome ' + req.session.username); });

使用reset方法終止Session:
 

app.get('/logout', function (req, res) { req.session.reset(); });

即時注銷Persona Session

(注:Persona是Mozzilla推出的網(wǎng)絡(luò)身份系統(tǒng))

與服務(wù)器端Session不同,客戶端Session的問題是服務(wù)端無法刪除Session。

服務(wù)器端架構(gòu)時,你可以刪除Session數(shù)據(jù)。任意的客戶端Cookie標(biāo)識的Session很可能不存在。但客戶端架構(gòu)時,Session數(shù)據(jù)不在服務(wù)端,不能保證Session數(shù)據(jù)在每個客戶端都被刪除。換句話說,我們無法同步用戶的客戶端狀態(tài)(已經(jīng)登錄)和服務(wù)端狀態(tài)(注銷登錄)。
 

為了彌補(bǔ)這個缺陷,客戶端Session中添加了過期時間。展開Session數(shù)據(jù)(被加密打包)前驗(yàn)證過期時間。如果過期了,拋棄Session數(shù)據(jù)并改變用戶狀態(tài)(如注銷登錄)。

過期機(jī)制在很多應(yīng)用中運(yùn)行良好(尤其是短過期時間需求)。如在Persona中,當(dāng)用戶發(fā)覺密碼收到威脅或已經(jīng)損壞時,我們需要提供方法讓用戶立即注銷Session數(shù)據(jù)。

這意味著需要保留一點(diǎn)點(diǎn)狀態(tài)信息在服務(wù)后端。我們處理即時注銷的方法是添加一個Token在用戶數(shù)據(jù)表和Session數(shù)據(jù)中。


每次API調(diào)用時比對Session數(shù)據(jù)中的Token和數(shù)據(jù)庫中的Token。如果不相同,返回錯誤信息并退出用戶。

這樣會附加多余的數(shù)據(jù)庫操作去查詢Token。幸好,大多數(shù)的API調(diào)用都需要讀取用戶數(shù)據(jù)表,把Token一起帶上就好了。


相關(guān)文章

  • koa router 多文件引入的方法示例

    koa router 多文件引入的方法示例

    這篇文章主要介紹了koa router 多文件引入的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 淺析 NodeJs 的幾種文件路徑

    淺析 NodeJs 的幾種文件路徑

    本篇文章主要介紹了淺析 NodeJs 的幾種文件路徑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 詳解如何讓Express支持async/await

    詳解如何讓Express支持async/await

    本篇文章主要介紹了詳解如何讓Express支持async/await,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 詳解前端任務(wù)構(gòu)建利器Gulp.js使用指南

    詳解前端任務(wù)構(gòu)建利器Gulp.js使用指南

    這篇文章主要介紹了前端任務(wù)構(gòu)建利器Gulp.js使用指南,對Gulp.js感興趣的同學(xué),可以參考下
    2021-04-04
  • 在linux中使用包管理器安裝node.js

    在linux中使用包管理器安裝node.js

    這篇文章主要介紹了在linux中使用包管理器安裝node.js的方法以及具體安裝過程,非常詳細(xì),推薦給大家,有需要的小伙伴參考下吧。
    2015-03-03
  • 深入淺析Nodejs的Http模塊

    深入淺析Nodejs的Http模塊

    我們知道傳統(tǒng)的HTTP服務(wù)器是由Aphche、Nginx、IIS之類的軟件來搭建的,但是Nodejs并不需要,Nodejs提供了http模塊,自身就可以用來構(gòu)建服務(wù)器,下面通過本文給大家介紹Nodejs的Http模塊,需要的的朋友參考下吧
    2017-06-06
  • node.js中的fs.mkdirSync方法使用說明

    node.js中的fs.mkdirSync方法使用說明

    這篇文章主要介紹了node.js中的fs.mkdirSync方法使用說明,本文介紹了fs.mkdirSync方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Nest.js系列之Providers及模塊功能使用詳解

    Nest.js系列之Providers及模塊功能使用詳解

    這篇文章主要為大家介紹了Nest.js系列之Providers及模塊功能使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 在Ubuntu系統(tǒng)上安裝Ghost博客平臺的教程

    在Ubuntu系統(tǒng)上安裝Ghost博客平臺的教程

    這篇文章主要介紹了在Ubuntu系統(tǒng)上安裝Ghost博客平臺的教程,Ghost博客平臺以Node.js寫成,需要的朋友可以參考下
    2015-06-06
  • Node.js和MongoDB實(shí)現(xiàn)簡單日志分析系統(tǒng)

    Node.js和MongoDB實(shí)現(xiàn)簡單日志分析系統(tǒng)

    這篇文章主要介紹了Node.js和MongoDB實(shí)現(xiàn)簡單日志分析系統(tǒng),本文給出了服務(wù)器端、客戶端、圖表生成、Shell自動執(zhí)行等功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04

最新評論

鹤岗市| 东光县| 宿松县| 陈巴尔虎旗| 舟曲县| 枣阳市| 天气| 石狮市| 玉龙| 禹城市| 北海市| 泸西县| 萍乡市| 汉寿县| 大田县| 鄱阳县| 新兴县| 忻城县| 岱山县| 监利县| 周口市| 修水县| 门头沟区| 盈江县| 中江县| 台州市| 襄汾县| 天峨县| 孟津县| 寿阳县| 玛纳斯县| 永登县| 德安县| 梓潼县| 山阴县| 常宁市| 江源县| 台前县| 丹凤县| 侯马市| 徐水县|