欢迎您访问宜州一中 您可以登录 或注册
 
收藏本站 简繁转换
一方天地育桃李,三尺讲台竞风采             宜州区一中在宜州博物馆举行“人杰地灵读宜州”故事分享会             宜州一中举行2024届中考百日誓师大会             龙腾启新 筑梦未来 ——宜州区第一中学欢庆2024年元旦文艺晚会             走进嘉联丝厂 畅享研学之乐 ——宜州区第一中学开展研学实践活动             2023年河池市宜州区第一中学/宜州区红卫学校家庭经济困难大学新生入学资助项目发放名册(第二批)             展科技志向,圆飞行梦想 ——宜州区一中2025届举行无人机大赛             2023年河池市宜州区第一中学\红卫学校 家庭经济困难大学新生入学资助项目发放名册(第一批)             法制进校园 以法促成长 ——宜州一中举行“三姐护蕾”法治进校园活动             “英”你精彩,“语”你同行 —— 我校2025届举行英文风采大赛            

DoraCMS

您现在的位置是:首页>文档内容页

文档详情

第10天 cookie与session— session插件开发

doramart 2024-05-11 23:58:27 技术文档232705
上一节的分析,我们了解了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插件,做一个数字累加的例子。

文章评论

取消回复
登录 参与评论

评论列表(