• 关于node中cookie和session使用


    HTTP协议的无状态性

    1)HTTP协议的通信模型: 基于 请求--处理 ---响应

    2)由于这个通信协议的关系,导致了HTTP每次请求之间都是没有关联的。每当一个请求完成之后,服务器就忘记之前谁曾经请求过!

    3)我们纯粹基于HTTP通信模型,是无法完成登录状态保持的!每次请求服务器,服务器都会把这个请求当作新请求来处理!

    4)我们可以通过cookie技术,实现状态保持,但是由于cookie是存储在客户端的一门技术,所以安全性几乎没有。因此,不要使用cookie存储敏感

    的数据。

    cookie介绍

    什么是cookie,作用是什么?

    1)由于HTTP协议是无状态的,且传统的服务器只能被动的响应请求。所以服务器获取到请求的时候,并不知道当前请求是哪个客户端的!

    2) 服务器为了能够区分每个客户端,需要使用一些小技术,来根据不同的请求区分不同的客户端。

    3)只要有请求发生,那么必然对应一个客户端。在每次客户端发起请求的时候,向服务器自动发送一个标识符,告诉服务器当前是哪个客户端正在请求服务器的数据。

    4)如何提供这个标识符号?可以在请求头中添加一个标签,叫做cookie。每次发送请求,都会把这个cookie随同其他报文一起发送给服务器,服务器可以根据报文中的cookie 区分不同的客户端浏览器。

    5)如何在客户端请求中添加标识符?

    在NODE中可以writeHeader的时候,通过set-cookie来将cookie标识符通过响应报文发送给客户端。

    6)客户端也可以通过一些方式来操作自己的cookie,比如: jquery.cookie

    cookie的基本使用

    var http =  require('http');

    var server = http.createServer();

    server.on('request',function(req,res)=>{

         //解析cookie

         var cookies ={}

         var cookieStr = req.headers.cookie;

       cookieStr && cookieStr.split(';').forEach(function(item){

             var params = item.split('=');

             cookies[params[0].trim()] = params[1].trim();

    })

       res.writeHeader(200,{

        'Content-Type':'text/plain; charset=utf8',

        'Set-Cookie':['issend=ok','age=20']

    });

      if(cookie.issend ==='ok'){

          res.end('NO')

    }else{

         res.end('yes')

    }

    })

    server.listen(4000,function(){

        console.log('run')

      })

    通过expires 设置 cookie的过期时间

     var expiresTime = new Date(Date.now()+1000*60).toUTCString();

    res.writeHeader(200,{

        'Content-Type':'text/html; charset=utf-8',

    'Set-Cookie':['isvisit=true; expires='+expiresTime]

    })

    cookie可以被伪造,不安全;

    使用谷歌插件 edit  this cookie,就能伪造cookie数据!所以不要使用cookie存储敏感的数据!比如登录状态和登录信息,这些应该存储在服务器端。

    什么是Cookie的应用场景:

    1)对安全性要求不高

    2)不需要存储大量的数据

    3) 主用应用场景,是用来做客户端与服务器之间的状态保持技术。

    Session登录退出及状态保存

    使用express-session来保存登录状态

    1)什么是session?

    由于HTTP是无状态的,所以服务器在每次连接中持续保存客户端的私有数据此时需要结合cookie技术。通过session 会话机制,在服务器端保存每个http请求的私有数据。

    2)session原理

    在服务器内存中开辟一块地址空间,专门存放每个客户端的私有数据,每个客户端根据cookie中保持的sessionId,可以获取到session数据。

    3)在express中使用session

    a)安装session模块

    npm install express-session -S

    b) 导入session模块

    var session = require('express-session');

    c)在express中使用session中间件

    app.use(session({

        secret:'keyboard cat',//相当于一个加密密钥,值可以是任意字符串

        resave:false,//强制session保存到session store中

        saveUninitialiazed:false //强制没有‘初始化’的session保存到storage中

    }))

    d)将私有数据保存到当前请求的session会话中

    req.session.user = result.dataValues

    req.session.islogin = true;

    e)通过destroy()方法情况session数据

    req.session.destory(function(err){

         if(err) throw err;

         res.redirect('/');

    })

  • 相关阅读:
    SVM理论之最优超平面
    回归系列之L1和L2正则化
    Logistic回归明明称呼为回归但为什么是分类算法?
    LTE无线接入三层协议体系结构
    80 道大厂算法高频面试题
    linux内核调试技术之printk
    计算机视觉岗常见面试题
    偏差(Bias)和方差(Variance)——机器学习中的模型选择
    正态分布x/y轴
    Python time strftime()方法
  • 原文地址:https://www.cnblogs.com/sunqq/p/8259966.html
Copyright © 2020-2023  润新知