Hello大家好!我是Cathy海希,今天是我学习编程的第47天。

欢迎同时关注我的Youtube&B站?Cathy海希TV

今天后知后觉地发现方方老师有在知乎上提及跟我相关的内容,简直太荣幸了?如果还不知道方方老师是谁的人,请搜索知乎 方应杭,方方老师的各种回答绝对让你恍然大悟,这也正是我当初决定加入饥人谷学习的契机。

传送门?https://bit.ly/3hING3E

每日斯多葛

Fast, lift, sprint, stretch, and meditate.

Build, sell, write, create, invest, and own.

Read, reflect, love, seek truth, and ignore society. Make these habits. Say no to everything else.

Avoid debt, jail, addiction, disgrace, shortcuts, and media.

Relax. Victory is assured.

以上是我非常喜欢的思想家Naval的推特之一,让人回味无穷……

学习时间

8h

学习内容

复习【前后分离】Ajax 实战:Cookie、Session

今天把整个实战部分的视频看了多遍,也跟着敲了一遍,实际写代码的话非常有助于为自己的思路指向,让我清楚自己现在的处境和需求。昨天的日记里我只给出了脑图的整理,今天我以文字的形式再来谈谈我对Cookie和session的理解。

需求背景

编程里的各个概念肯定都是应运而生的,Cookie和session也不例外。我们通过实现网页中用户注册、登录的功能,来看看这两者在其中是如何发挥它们的作用的吧!

用户注册

前端:把用户注册的数据通过POST请求,发给后端。

后端:获取到位于请求体的数据,储存到数据库里。我们这里使用一个users.json文件作为数据库。为了实现把数据储存到数据库里,需要两个大的步骤:

读数据库(?转化成JS对象),对JS对象做完处理后,

再写数据库(?转化成JSON字符串)

用户登录

前端:把用户登录的数据通过POST请求,发给后端。

后端:获取到位于请求体的数据,看看数据库里是否有匹配的数据(用户名&密码)。

Cookie

大家应该都有过这样子的体验:登录成功了一次的页面,下一次也是可以维持在【已登录】的状态。这是怎么做到的呢?我们什么都不做的时候,通过正确的信息登录跳转的/home.html和直接输入地址进入的/home.html发的请求没有区别啊?如何识别一个用户是登录过的还是没有登录过的呢?人类发明的一切都是来源于生活,包括Cookie。我们可以联想公园的检票员,他是通过是否有门票来区别游客的。那么我们是不是也可以借用跟门票一样的存在去区别登录过和没有登录的用户呢?那么当用户成功登录,为了标记用户已登录,我们让服务器发一张门票吧——在响应头里添加一个东西:

response.setHeader('Set-Cookie', 'login= 1',HttpOnly);//这是Node.js的写法

?服务器会下发一段字符串给浏览器,这便是大名鼎鼎的Cookie啦?

浏览器在收到响应之后通常会保存下Cookie(在开发者工具的Application里查看),之后对该服务器的每一次请求中都会把Cookie放在请求头里发送给服务器。

设置了HttpOnly属性的cookie不能使用JavaScript 经由Document.cookie 属性、XMLHttpRequest 和Request APIs 进行访问,防止黑客从前端篡改Cookie。

然后我们让服务器读取看看有没有Cookie,

const cookie = request.headers['cookie']

如果cookie匹配的话就让让页面显示【已登录】。

但是我们不仅仅希望页面只显示【已登录】,还想更加人性化一点,比较可以显示【欢迎海希回来】,这个海希明显是用户信息的一部分,我们怎么拿到它呢?首先,服务器把user_id放到Cookie里,

response.setHeader('Set-Cookie', `user_id = ${user.id},HttpOnly`);

/home.html渲染之前,先通过请求头里Cookie里的${user.id}首先看数据库里有没有user,有的话就把用户名替换对应的占位符{{user.name}}就好了。如果没有的话,就显示登录按钮。

光有Cookie还不够

但是,做到了上面一步,看似没问题,但是打开开发者工具Application查看Cookie的话,会发现一个大问题!如果我知道另外一个用户的user_id,我只要修改成他的user_id,我不就可以黑他的页面了吗!?所以把user_id直接放在Cookie里,暴露在前端是非常危险的做法。那么应该如何做呢?

session

这里有一个好办法:把user_id信息藏在后端服务器里。怎么做呢?

  1. 建立一个session.json专门用来管理隐藏的信息;
  2. 服务器设置Cookie的时候,不直接发user_id,而是发一个随机id。
const random = Math.random();response.setHeader('Set-Cookie', `session_id = ${random},HttpOnly`);
  1. 先读取session.json,然后把【随机数对应user.id】再写到这个文件里;
  2. 这样子我们就传了一段浏览器不知道是什么玩意儿的字符串在Cookie里。

随着而来的/home.html渲染之前,先通过看请求头里Cookie里的sessionId首先看有没有这个session,有的话就拿来其对应用户名去替换占位符{{user.name}}就好了。

由于session存在于服务器端的文件上,我们可以让其具有时效性,比如随时删除我们觉得有问题的数据。

session总结

Session保存在服务器的文件中,服务器一般会将 Session id 放到 Cookie 中,发放给浏览器。

mindset

呼……为了帮助自己理解整个思路,整个代码实现的视频看了3、4遍?现在至少在用户注册、登录整个情景里,我已经彻底搞清楚Cookie和session的存在理由了。学习新事物就是要知难而上,如果内容都是一些简单的不烧脑的,那也就说明进步不大。典型的痛并快乐着?

postman怎么传session_Day 47: 不搞懂Cookie和session誓不罢休相关推荐

  1. 一文彻底搞懂Cookie、Session、Token到底是什么

    作者:不学无数的程序员 原文链接:https://juejin.im/post/5de4c3c76fb9a071b86cc482 Cookie 夏洛:大爷,楼上322住的是马冬梅家吧? 大爷:马都什么 ...

  2. 第八十五期:一文彻底搞懂cookie和session

    在Web发展史中,我们知道浏览器与服务器间采用的是 http协议,而这种协议是无状态的,所以这就导致了服务器无法知道是谁在浏览网页,所以为了解决这一问题,先后出现了四种技术,分别是隐藏表单域,URL重 ...

  3. cookie代码加时间多久出现一次_一文彻底搞懂Cookie、Session、Token到底是什么

    前言 在了解这三个概念之前我们先要了解HTTP是无状态的Web服务器,什么是无状态呢?就像上面夏洛特烦恼中经典的一幕对话一样,一次对话完成后下一次对话完全不知道上一次对话发生了什么.如果在Web服务器 ...

  4. 访问网址 token的格式_一文彻底搞懂Cookie、Session、Token到底是什么

    欢迎关注文章系列 ,关注我 <提升能力,涨薪可待> <面试知识,工作可待> <实战演练,拒绝996> 如果此文对你有帮助.喜欢的话,那就点个赞呗,点个关注呗! Co ...

  5. 一文搞懂cookie、session、token、jwt、OAuth

    文章目录 0 测试环境 1 cookie 1.1 概念 1.2 使用flask设置cookie 1.3 浏览器端访问 1.4 设置简单cookie 1.5 给cookie设置一些属性 1.6 浏览器操 ...

  6. 面试题:彻底搞懂 Cookie 和 Session

    我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等. ...

  7. 彻底搞懂Cookie、Session、JWT和Token

    文章目录 引入:http是一个无状态协议?怎么解决呢? 一.Cookie和Session 1.1 cookie 注意事项: 1.2 cookie 重要的属性 1.3 session 注意事项: 1.4 ...

  8. 一文搞懂cookie与session

    在学习cookie/session 之前需要懂得几个知识. 客户端 客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序.别 称 :用户端 web客户端 :Web客户端主要 ...

  9. chrome session丢失_一文带你彻底读懂Cookie、Session、Token到底是什么

    在了解这三个概念之前我们先要了解HTTP是无状态的Web服务器,什么是无状态呢?就像上面夏洛特烦恼中经典的一幕对话一样,一次对话完成后下一次对话完全不知道上一次对话发生了什么.如果在Web服务器中只是 ...

最新文章

  1. win10键盘全部没反应_Win10笔记本键盘失灵怎么办 Win10键盘失灵解决方法【详解】...
  2. tensorflow手册_谷歌TensorFlow开发者认证考试来了!哪些要点需要了解?
  3. 能熟练掌握和应用计算机基础知识,浙江省大学生计算机基础知识与应用能力等级考试二级(V......
  4. 归并排序 Merge Sort
  5. SpringBoot Controller接收参数的几种常用方式
  6. LinQ高级查询、组合查询
  7. [2014.5.22][UBUNTU]Ubuntu与Windows系统时间不同步的问题
  8. python请求模块requests的session不能保存cookies的情况
  9. 转 windows核心编程 学习笔记 目录
  10. 删除数据库中的所有表
  11. 视频教程-2021软考网络工程师--基础知识视频教程-软考
  12. C语言中的常量与变量
  13. 微信文件没下载过期了
  14. 最强大脑记忆曲线(1)
  15. 龙果支付 mysql_开源版龙果支付系统-国内首款开源的互联网支付系统
  16. 法正 (21) :端午
  17. Nelder-Mead(内德-米德)算法
  18. java ews_如何验证EWS Java API
  19. ubuntu虚拟机中的vscode:扩展失败XHR Failed
  20. LeetCode-Python-362. 敲击计数器

热门文章

  1. 【clickhouse】clickhouse表引擎之MaterializeMySQL引擎
  2. 【Flink】connection indicates remote task manager was lost
  3. spark学习-SparkSQL--07-SparkContext类和SparkConf类
  4. tcpdump抓包最常用的命令
  5. linux使用logrotate管理日志
  6. 4轮拿下字节Offer,面试题复盘(含答案)
  7. Spring依赖注入的两种方式(根据实例详解)
  8. 利用,ArrayList,HashMap,洗牌,发牌,看牌。
  9. windows效率工具,翻译软件QTranslate
  10. android网页接口实现方法,Android 程序员搞 web 之 webApi (十 四)