• 深入浅出解析cookie与session


    1:第一点想要了解一样技术必须了解它的哲学,也就是这项技术是为了解决什么问题而诞生的它存在的意义是什么?

    因为HTTP是无连接的,当请求结束连接就会中断所以会产生身份识别的问题。

    因此诞生了cookie甚至于在localStorage出现之前浏览器存储功能都是依靠cookie来完成的

    但是它的原理简单到爆,一句话就是当浏览器访问服务器时,服务器会向浏览器发送一个cookie

    可以理解为标识符,下次浏览器再向服务器发送请求时在上行报文中携带这个标识符(cookie)

    服务器就能够根据标识符做出识别,当服务器在下行报文中设置kookie的持续时间

    那么浏览器在一定时间内访问该服务器都会携带这个cookie,kookie的本意是曲奇,老外喜欢拿饼干做信物

    所以kookie就是一个浏览器跟服务器通讯的信物,如果是中国人发明可能就是黑话,这个基础是建立在HTTP无连接

    2:那么什么是session有人说session很抽象,难以理解其实session对比cookie更好理解更简单

    cookie需要服务器在下行报文中设置,那么session完全不需要,session依赖于cookie甚至可以为就是cookie

    只是做了简单的升级,有一个唯一代理的概念

    也就是说当浏览器第一次向服务器发送请求时,服务器是不认识浏览器的,因为浏览器上行报文没携带信物cookie

    这个时候你服务器就得设置,给浏览器返回一个信物cookie下次浏览器再来不就认识了?

    但问题是有人觉得服务器设置的信物cookie五花八门,而且过于简单,所以session出现了

    服务器可以设置是否开启session每门语言都不同等下举例。

    如果你服务器设置了开启session那么此时服务器会根据hash算法随机生成一串乱码放到内存中

    同时将这一串乱码通过下行报文发送给浏览器,这一切都是透明的,也就是不用你程序员自己设置了,我服务器自动干了

    还是那回事服务器给浏览器一个信物,浏览器下次来就拿着这串乱码,跟服务器内存中的乱码比较

    就跟对黑话一样,对上了就OK了,实际上你是不是你服务器那管这些,只管对口号。

    例如我登陆了博客园,博客园服务器给我发了一串乱码,这个时候你拿着这串乱码就能登陆我的后台。

    同时服务器会根据这串乱码,以哈希结构缓存一些信息,浏览器进入服务器只要黑话对上了

    那么就可以读取到内存中的信息。

    node.js 中开启session,那么每一个浏览器访问服务器时服务器都会发送一个cookie给浏览器作为信物,乱码

    var express = require("express");
    var formidable = require("formidable");
    var session = require('express-session')
    
    var app = express();
    app.set("view engine", "ejs");
    // 开启唯一代理session
    app.set('trust proxy', 1);
    app.use(session({
        secret: 'lalala',
        saveUninitialized: true,
        cookie: { maxAge: 86400 }
    }));
    
    
    //首页
    app.get("/", function(req, res) {
        //呈递模板
        res.render("shouye");
    });
    
    app.post("/login", function(req, res) {
    
    });
    
    app.listen(3000);

    我们就可以根据session缓存的特性做一些操作

    var express = require("express");
    var formidable = require("formidable");
    var session = require('express-session')
    
    var app = express();
    app.set("view engine" , "ejs");
    
    app.set('trust proxy', 1);
    app.use(session({
        secret: 'lalala',
        saveUninitialized: true,
        cookie: { maxAge: 86400 }
    }));
    
    
    //首页
    app.get("/" , function(req,res){
        //呈递模板,把登录信息也带上去:
        res.render("shouye" , {
            login : req.session.login ,
            yonghuming : req.session.name ,
            anlian : req.session.love
        });
    });
    
    //登录
    app.post("/login" , function(req,res){
        var form = new formidable.IncomingForm();
        form.parse(req , function(err , fields){
            req.session.login = true;
            req.session.name = fields.name;
            req.session.love = fields.love;
            res.redirect("/");
             
        });
    });
    
    app.listen(3000);
  • 相关阅读:
    bzoj1711: [Usaco2007 Open]Dining吃饭
    bzoj1036: [ZJOI2008]树的统计Count
    bzoj1497: [NOI2006]最大获利
    bzoj2561: 最小生成树
    BZOJ 2083: [Poi2010]Intelligence test( )
    BZOJ 2212: [Poi2011]Tree Rotations( 线段树 )
    BZOJ 1110: [POI2007]砝码Odw( 贪心 )
    BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )
    BZOJ 1537: [POI2005]Aut- The Bus(dp + BIT)
    BZOJ 2875: [Noi2012]随机数生成器( 矩阵快速幂 )
  • 原文地址:https://www.cnblogs.com/tengx/p/12587306.html
Copyright © 2020-2023  润新知