HTTP协议的无状态性

1、HTTP协议的通信模型:基于【请求 - 处理 - 响应】的!

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

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

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

什么是cookie,作用是什么

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

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

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

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

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

在Node中可以在writeHeader的时候,通过Set-Cookie来将cookie标识通过响应报文发送给客户端!

客户端也可以通过一些方式来操作自己的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; // 从请求的headers中获取cookie信息
    cookieStr && cookieStr.split(';').forEach(function (item) {
        var parts = item.split('=');
        cookies[parts[0].trim()] = parts[1].trim(); // 将cookie解析出来,保存到对象中
    });
    res.writeHeader(200, {
        'Content-Type': 'text/plain; charset=utf-8',
        "Set-Cookie": ['issend=ok', 'age=20']
    });
    if(cookies.issend ==='ok'){
        res.end('不要太贪心哦!');
    }else{
        res.end('呐,赏你一朵小红花~~');
    }
});
server.listen(4000, function () {
    console.log('服务器已启动!');
});

通过expires设置Cookie的过期时间

// 设置 过期时间 为60秒之后
// 注意:在设置过期时间的时候,需要将时间转换为 UTC 格式
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, 'test=OK']
});
res.end('<h3>你好,欢迎光临,送给你一个苹果!</h3>');

GMT和UTC有什么区别?格林尼治标准时(GMT)与世界时(UTC)是怎么回事

cookie可以被伪造,不安全

一些敏感的数据,应该存储都服务器端!谷歌插件可以修改

什么是Cookie的应用场景

1、对安全性要求不高
2、不需要存储大量的数据 (无关紧要的数据)

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

安全数据保存

使用session存储在服务器端

什么是session

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

session原理

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

在Node中,

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

//1、安装session模块

npm install express-session -S

//2、导入session模块

var session = require('express-session')

//3、在express中使用session中间件:

// 启用 session 中间件
app.use(session({
  secret: 'keyboard cat', // 相当于是一个加密密钥,值可以是任意字符串
  resave: false, // 强制session保存到session store中
  saveUninitialized: false // 强制没有“初始化”的session保存到storage中
}))

//4、将私有数据保存到当前请求的session会话中:

// 将登录的用户保存到session中
req.session.user = result.dataValues;
// 设置是否登录为true
req.session.islogin = true;

//5、通过destroy()方法清空session数据:

req.session.destroy(function(err){
  if(err) throw err;
  console.log('用户退出成功!');
  // 实现服务器端的跳转,这个对比于 客户端跳转
  res.redirect('/');

});

Node的cookie和session相关推荐

  1. 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session

    1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...

  2. node --- [express] cookie/session 机制与 中间件的使用(路由守卫)

    说明 源代码 记忆.遗忘回顾 使用 cookie/session 机制,让 客户端/服务器 的访问变得有状态 cookie 与 session 由于 HTTP 协议的无状态性,当一次连接断开后. 服务 ...

  3. 详解COOKIE和SESSION关系和区别

    (转自个推,理解起来不难) 在技术面试中,经常被问到"说说Cookie和Session的区别",大家都知道,Session是存储在服务器端的,Cookie是存储在客户端的,然而如果 ...

  4. cookie和session(1)

    cookie和session 1.cookie产生 识别用户  HTTP是无状态协议,这就回出现这种现象:当你登录一个页面,然后转到登录网站的另一个页面,服务器无法认识到.或者说两次的访问,服务器不能 ...

  5. cookie和session、web服务工作原理、Apache配置php扩展、php简介

    cookie和session: cookie和session区别:cookie数据是存在本地的,而session数据是存在服务端的,session比cookie更安全. cookie:用于http做会 ...

  6. postman怎么传session_Day 47: 不搞懂Cookie和session誓不罢休

    Hello大家好!我是Cathy海希,今天是我学习编程的第47天. 欢迎同时关注我的Youtube&B站?Cathy海希TV 今天后知后觉地发现方方老师有在知乎上提及跟我相关的内容,简直太荣幸 ...

  7. cookie、session和token

    https://zhuanlan.zhihu.com/p/25495290?utm_source=wechat_session&utm_medium=social 一.cookie 众所周知, ...

  8. 【全栈接口测试进阶系列教程】精通api接口测试,接口分类,接口架构,http,webservice,dubbo接口协议,接口流程,接口工具,cookie,session,token接口鉴权原理以及实战

    目录 一,[什么是接口测试?为什么要作接口测试] 1.接口的作用 2.为什么要做接口测试 3.接口都有哪些类型? 二,[接口测试的分类] 接口的分类: http和webservice接口区别: 三,[ ...

  9. 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token...

    为什么你学不会递归?告别递归,谈谈我的一些经验 可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! 可 ...

最新文章

  1. 用php做一个简单的汇率,vue实现简单实时汇率计算功能
  2. undertale人物_【undertale】传说之下精美人物图包 (Frisk篇)
  3. Kali Linux信息收集工具全
  4. cast函数 oracle 日期_从Oracle到PG 该做的改造工作一个都不能少!
  5. 21.println输出打印.rs
  6. 来自阿里巴巴佛系安卓程序员的指南,专题解析
  7. Shell命令-文件及内容处理之sort、uniq
  8. JvavScript中的函数与对象
  9. 你我的父母,都在被互联网“割韭菜”
  10. 一次荒唐的技术决策过程:排除研发总监,无技术参与
  11. 2018年最全阿里巴巴开源项目汇总
  12. 基于Multisim的555时基电路
  13. VS2005 SP1安装
  14. MySQL面试题常见知识点总结
  15. java 创建meta inf_java – 在Eclipse中创建META-INF / services文件夹
  16. 最新2021计算机排名中国大学排名,2020-2021年计算机类专业排名_中国大学本科教育按专业类排行榜_中国科教评价网...
  17. webstorm下载安装教程
  18. java彩票机选生成
  19. LightGBM模型简单预测股票涨跌情况
  20. 复旦EMBA:2021,相信未来,从不确定中找到属于自己的确定

热门文章

  1. python 背景音乐程序代码_【Python开源】抖音热门BGM爬虫下载~~~~
  2. 天弘基金+支付宝 互联网金融的成功试点
  3. JS——检测当前浏览器环境为微信OR企业微信
  4. iphone8p百度云认证_图便宜买了台iPhone 8,使用一个月之后,这3大槽点不得不说!...
  5. 开始菜单和cortana无法工作
  6. 鸿蒙武器排行榜,冰雪传奇:鸿蒙级别首饰你知道哪些
  7. 《阅读的方法》读书笔记4-2:极致的体验
  8. 商务谈判十大注意事项
  9. GitFlow详解教程
  10. 1、position:fixed 固定定位