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

首頁 > 編程 > JavaScript > 正文

詳解nodejs express下使用redis管理session

2019-11-19 16:44:54
字體:
來源:轉載
供稿:網友

Session實現原理

實現請求身份驗證的方式很多,其中一種廣泛接受的方式是使用服務器端產生的Session ID結合瀏覽器的Cookie實現對Session的管理,一般來說包括以下4個步驟:

1.服務器端的產生Session ID

2.服務器端和客戶端存儲Session ID

3.從HTTP Header中提取Session ID

4.根據Session ID從服務器端的Hash中獲取請求者身份信息 

使用Express和Redis對Session管理的實現

var session = require('express-session');var RedisStrore = require('connect-redis')(session);var config={"cookie" : {  "maxAge" : 1800000}, "sessionStore" : {  "host" : "192.168.0.13",  "port" : "6379",  "pass" : "123456",  "db" : 1,  "ttl" : 1800,  "logErrors" : true}app.use(session({  name : "sid",  secret : 'Asecret123-',  resave : true,  rolling:true,  saveUninitialized : false,  cookie : config.cookie,  store : new RedisStrore(config.sessionStore)}));

實現堆棧
express-session實例化后調用代碼(https://github.com/expressjs/session)

if (!req.sessionID) {  debug('no SID sent, generating session');  generate();  next();  return; } 

generate方法調用(https://github.com/expressjs/session)

store.generate = function(req){  req.sessionID = generateId(req);  req.session = new Session(req);  req.session.cookie = new Cookie(cookieOptions);   if (cookieOptions.secure === 'auto') {   req.session.cookie.secure = issecure(req, trustProxy);  } }; 

RedisStrore實例化時調用store.set(sid, session, callback)(https://github.com/expressjs/session)

store.set調用RedisStore.prototype.set(https://github.com/tj/connect-redis),其中座位hashkey使用的是前綴+sessonId,前綴默認值為'sess',多個應用共享和不共享同一個redis session服務時,一定要注意設置prefix

RedisStore.prototype.set = function (sid, sess, fn) {  var store = this;  var args = [store.prefix + sid];  if (!fn) fn = noop;   try {   var jsess = store.serializer.stringify(sess);  }  catch (er) {   return fn(er);  }   args.push(jsess);   if (!store.disableTTL) {   var ttl = getTTL(store, sess);   args.push('EX', ttl);   debug('SET "%s" %s ttl:%s', sid, jsess, ttl);  } else {   debug('SET "%s" %s', sid, jsess);  }   store.client.set(args, function (er) {   if (er) return fn(er);   debug('SET complete');   fn.apply(null, arguments);  }); }; 

store.client.set調用的為(https://github.com/NodeRedis/node_redis)

最終調用原生redis.hset方法

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 息烽县| 古田县| 大渡口区| 文成县| 胶州市| 土默特左旗| 宽城| 邢台县| 德令哈市| 清苑县| 昌都县| 邵阳县| 阿合奇县| 固始县| 措美县| 车险| 克山县| 高淳县| 乌拉特中旗| 宁陕县| 兴仁县| 鹿邑县| 双鸭山市| 永吉县| 凤庆县| 广东省| 灌阳县| 宁化县| 布尔津县| 许昌市| 台北县| 庄河市| 谷城县| 乌拉特前旗| 剑川县| 彰武县| 历史| 彝良县| 平邑县| 张家界市| 漠河县|