欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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


擴展有狀態(tài)服務

當擴展服務的時候,你肯定有三種選擇:

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

但都有缺陷:

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

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


客戶端Session

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

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

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


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

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

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


Node客戶端Session

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

在Express框架應用中的使用:
 

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

然后,向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)絡身份系統(tǒng))

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

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

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

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

這意味著需要保留一點點狀態(tài)信息在服務后端。我們處理即時注銷的方法是添加一個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一起帶上就好了。


相關文章

  • Nodejs異步回調(diào)的優(yōu)雅處理方法

    Nodejs異步回調(diào)的優(yōu)雅處理方法

    這篇文章主要介紹了Nodejs異步回調(diào)的優(yōu)雅處理方法,本文使用了ES6中的新特性,用一種十分優(yōu)雅的方式解決了回調(diào)問題,需要的朋友可以參考下
    2014-09-09
  • gyp?ERR!報錯問題解決辦法

    gyp?ERR!報錯問題解決辦法

    這篇文章主要給大家介紹了關于gyp?ERR!報錯問題的解決辦法,文中將解決的辦法介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • express.js中間件說明詳解

    express.js中間件說明詳解

    這篇文章主要介紹了express.js中間件說明詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 詳細分析Node.js 多進程

    詳細分析Node.js 多進程

    這篇文章主要介紹了Node.js 多進程的的相關資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • node中的密碼安全(加密)

    node中的密碼安全(加密)

    這篇文章主要介紹了node中的密碼安全(加密),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • NodeJS遠程代碼執(zhí)行

    NodeJS遠程代碼執(zhí)行

    這篇文章主要介紹了NodeJS遠程代碼執(zhí)行方法的相關資料,需要的朋友可以參考下
    2016-08-08
  • NVM安裝nodejs的方法實用步驟

    NVM安裝nodejs的方法實用步驟

    安裝node的方式有很多種,本文主要介紹了NVM安裝nodejs的方法實用步驟,希望能幫助大家來解決問題,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 充分發(fā)揮Node.js程序性能的一些方法介紹

    充分發(fā)揮Node.js程序性能的一些方法介紹

    這篇文章主要介紹了充分發(fā)揮Node.js程序性能的一些方法介紹,Node.js是把JavaScript用于服務器端的框架,需要的朋友可以參考下
    2015-06-06
  • 一文秒懂nodejs中的異步編程

    一文秒懂nodejs中的異步編程

    這篇文章主要介紹了深入理解nodejs中的異步編程,本文給大家介紹的非常想詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • NPM命令運行報錯:npm?v10.2.4?is?known?not?to?run?on?Node.js?v14.21.1解決辦法

    NPM命令運行報錯:npm?v10.2.4?is?known?not?to?run?on?Node.js

    這篇文章主要給大家介紹了關于NPM命令運行報錯:npm?v10.2.4?is?known?not?to?run?on?Node.js?v14.21.1的解決辦法,文中將解決辦法介紹的非常詳細,需要的朋友可以參考下
    2024-01-01

最新評論