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

首頁 > 開發 > JS > 正文

詳解nodejs express下使用redis管理session

2024-05-06 16:36:45
字體:
來源:轉載
供稿:網友

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/49092.html">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方法

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


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 望江县| 三都| 紫阳县| 台前县| 平南县| 无棣县| 尼玛县| 和硕县| 白城市| 响水县| 萨嘎县| 柳河县| 赤水市| 游戏| 湖北省| 民丰县| 肇庆市| 沂水县| 攀枝花市| 临沂市| 南宁市| 桑日县| 兴文县| 吉林省| 乐至县| 芦山县| 嘉善县| 丰宁| 咸丰县| 如东县| 大邑县| 临漳县| 潍坊市| 宣恩县| 河源市| 蕉岭县| 昌宁县| 嵊泗县| 阜新市| 北海市| 霍州市|