国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 建站經(jīng)驗 > 正文

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

2019-11-02 15:46:56
字體:
供稿:網(wǎng)友

   這篇文章主要介紹了Node.js編程中客戶端Session的使用詳解,是Node.js入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下

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

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

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

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

  不同服務(wù)端同步Session數(shù)據(jù)

  不同服務(wù)端連接單點中心(獲取Session)

  保證用戶訪問同一個服務(wù)端

  但都有缺陷:

  同步數(shù)據(jù)增加性能開銷

  單點中心降低系統(tǒng)擴展性

  如果用戶上次訪問的服務(wù)端需要維護怎么辦

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

  客戶端Session

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

  無所謂哪個服務(wù)端,Session數(shù)據(jù)都有效

  不需要維護服務(wù)端狀態(tài)

  不需要服務(wù)端同步

  任意添加新的服務(wù)端

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

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

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

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

  Node客戶端Session

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

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

  ?

  1const clientSessions = require("client-sessions");

  ?

  1app.use(clientSessions({ secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK' // 設(shè)置一個隨機長字符串! })

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

  ?

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

  讀取屬性:

  ?

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

  使用reset方法終止Session:

  ?

  1app.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標識的Session很可能不存在。但客戶端架構(gòu)時,Sessi

八個字網(wǎng)名[www.la240.com/html2017/1/8/]
on數(shù)據(jù)不在服務(wù)端,不能保證Session數(shù)據(jù)在每個客戶端都被刪除。換句話說,我們無法同步用戶的客戶端狀態(tài)(已經(jīng)登錄)和服務(wù)端狀態(tài)(注銷登錄)。

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 本溪市| 从江县| 合川市| 修文县| 宣威市| 宣汉县| 定陶县| 汉沽区| 犍为县| 宣武区| 临澧县| 晋州市| 昭苏县| 江西省| 苏尼特右旗| 舞钢市| 和田市| 洮南市| 平泉县| 武山县| 呼图壁县| 玉树县| 迁安市| 始兴县| 天柱县| 安岳县| 沅陵县| 普陀区| 寿阳县| 土默特左旗| 昌都县| 顺平县| 隆林| 深泽县| 宁南县| 蓬莱市| 龙陵县| 元谋县| 东光县| 连南| 克山县|