第10天 cookie与session— session插件开发
上一节的分析,我们了解了cookie和session的关系。接下来,将实际的开发session插件,以下是session插件源代码。
session插件开发
上一节的分析,我们了解了cookie和session的关系。接下来,将实际的开发session插件,以下是session插件源代码。
var sid = Date.now() , cache = {} module.exports = function(req,res,next){ Object.defineProperty(req,"session",{ get: function(){ return cache[this.sessionId]; }, set: function(value){ cache[this.sessionId] = value; } }) if(!(req.headers.cookie && (req.sessionId = parse(req.headers.cookie).sessionId))){ req.sessionId = sid += 1; res.setHeader("Set-Cookie",["sessionId="+req.sessionId]) } next(); } // 把cookie字符串转换为json对象 function parse(str){ var arr = str.split(";") ,obj = {} arr.forEach(function(field){ var o = field.split("="); obj[o[0].trim()] = o[1]; }) return obj; }
sid
是一个生成ID的时间阀,每次需要生成性的sessionId时候会 +1 , cache
是保存session id对应的数据,这个数据用户可通过req.session = xxx 自定义,也可通过req.session进行访问。parse
方法是用来把cookie的字符串形式转换为json对象。
通过 if(!(req.headers.cookie && (req.sessionId = parse(req.headers.cookie).sessionId)))
判断req.sessionId是否存在,如果不存在那么就创建一个并把sessionId信息写入到响应头发送给客户端。
最后,还要在index.js
文件中加入:
exports.session = require("./lib/session");
有了session插件后,明天开发博客系统就有了保证,因为登录状态需要记录在session里。下一节,我们用session插件,做一个数字累加的例子。
很赞哦! ( 0
)