1、将cookie,session之前,还是先说说http协议

  1. http协议是基于TCP/UDP之上的应用层一个标准
  2. 请求,响应的模式。是你必须先请求到一个服务端之后,服务端才会响应到你。他是不会无缘无故响应的
  3. 无状态性,意思是说你本次请求就是一个全新的请求,跟你上一次请求是没有关系的,这个和打10086人工服务一样,就算你前一分钟打了一次,后一分钟继续打一次,客服人员是记不住你是谁的
  4. 无连接性,你向服务端发出一个请求,服务端响应了你,那么便会关闭此次通道。

2、cookie的由来

前面说了http是无状态,无连接的,那么我想让服务端记住访问者的一个身份,就是说知道此次访问的是哪一个用户,服务端就可以把那个用户相关的一些数据进行返回回去。所以说这时需要一个标志性的东西,去代表用户的身份,这就是为什么要使用到cookie

2.1 cookie是什么呢?

​ 它是保存在客户端上的键值对 , Key,Value的形式,浏览器会帮你标识是哪个服务端的cookie,下次你向那个服务端发出请求的话,会自动帮你带上cookie

服务端怎么通过cookie就知道你是哪位用户的?

​ 服务端那边可以拿到你所携带的cookie,进行一系列的验证,验证成功了,就知道你是哪位用户了,所以这个cookie值必须要标识着用户,那么问题就是设计标识的cookie

// 我们可以设置将用户的id账号密码写成一个字典
user_info = {"id":1,"name":"朱宇","password":"123"}
// 然后我们可以将这个字典格式的数据进行加密,这里是伪代码
md5 = dict_to_md5(user_info)
// 设置成功后返回给浏览器 // 用户下次访问服务端,我们可以那个携带的cookie值,这是我们加密得到的
md5 = cookie值
// 再进行某种解密方法,得到加密前的数据,拿出用户的数据,再进行校验
user_info = md5_to_dict(md5)

通过cookie确实可以标志一个用户,但是也是存在一个安全隐患的。

2.2 cookie存在的不安全性

  1. 首先cookie它是保存在浏览器上面的,某些人可以通过某种手段就可以拿到你的cookie值,携带这个cookie向服务端发出请求,服务端它判断是哪个用户的依据只有cookie,所以就把拿着你cookie的人当成的你,对你的信息,财产带来严重危害。
  2. 假如你访问的服务端,他给你的返回的明文信息的话,那么你的信息就会呗泄露

3、session

3.1 session是什么

​ 之前有了cookie他可以标识一个用户,但是cookie 它自身最大的支持4096字节,并且保存在浏览器中,相对来说不是太安全,因此出现可以自身可以支持更大字节的,且保存在服务端,这就是session。

3.2 session的流程

  1. 首先你向服务端发出一个请求,服务端接收到请求,会根据相关算法得到一个随机字符串,然后将你的信息进行加密,将这个随机字符串和加密之后的信息一同保存在数据库中
  2. 保存之后,生成一个cookie返回,cookie的key值为session_id,这个key值你可以随意指定,value值就是那串随机的字符串。注意这个key值会用到。

4、注意

对于安全性比较的话,cookie和session都是差不多的,不存在session就比cookie安全

为什么这么说:上面说了session的一个流程,他最终返回的一个cookie值,那么攻击者就可以拿着session_id的值向你的服务端发请求,同样可以成功请求到,这样的方式难道不是和cookie不安全性的原因是差不多的吗?不一样的是攻击者获取到的cookie值会不会造成用户的信息泄露,用cookie的话,它是包含着用户一些标识的信息的,用session的话,只能得到你个加密后的字符串。要是用cookie的话,你可以将标识用户的信息进行加密,hash加密等等,这样的无法进行解密了。

5、在flask中怎么使用cookie,session

5.1 cookie的设置

from flask import Flask, Response

app = Flask(__name__)

@app.route('/index')
def index():
return "index page" @app.route('/set_cookie')
def set_cookie():
response = Response('设置cooke')
response.set_cookie('name', '朱宇')
return response if __name__ == "__main__":
app.run(debug=True) # set_cookie它是Response的一个方法,里面还有其他很多参数,想了解的可以去看看源码,比如设置cookie的过期时间。

5.2 session的设置

from flask import Flask,  session, Response

app = Flask(__name__)

@app.route('/index')
def index():
return "index page" @app.route('/set_session')
def set_session():
session['name'] = '朱宇'
response = Response('设置session')
return response if __name__ == "__main__":
app.run(debug=True)

启动上面这个flask,并向/set_session发请求,会报错,错误显示为

它的意思就是没有设置SECRET_KEY的值,为什么一定要设置呢?

我先解释下:首先sesion的数据都是放在服务端上的吧,django执行makemigrationsmigrate 他会自动帮你做数据库迁移名命,默认在sqlite数据库中生成一些表,其中就有保存session的数据表,这些都是django给我们自带的,而我们flask是没有数据库的,所以这个session保存在哪里呢(前提是不安装其他数据库插件)?他会保存在浏览器,对!和cookie一样,不一样的是,这个是进行加密之后的,所有必须要先设置SECRET_KEY的值,相当于就是盐。

所以下上面代码的基础上,加上这段代码

app.config['SECRET_KEY'] = 'zhuchunyudashuaibi'
# 只可以随便写,只是一个盐

开启项目,继续发请求,下面是结果,返回了一个加密的session

6、结束

6.1 再提一点

关于对一个用户的标识,除了上面的这两种方式,出了一个jwt,可以去了解下

关于这个方面的内容更新完毕

session和cookie的介绍的更多相关文章

  1. session与cookie的介绍和两者的区别之其相互的关系

    转:https://blog.csdn.net/weixin_37196194/article/details/55806366 本文分别对Cookie与Session做一个介绍和总结,并分别对两个知 ...

  2. session和cookie的知识总结

    1.HTTP协议 由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接.HTTP服务器则在那个端口监听客户端发送过来的请求.一旦收到请求,服务器(向客户端)发回一个状态 ...

  3. session和cookie介绍以及session简单应用

    介绍http协议与TCP协议:        http协议:是短连接,关闭浏览器的时候断开与服务器的连接         TCP协议:是长连接,连接一直存在         http协议是在TCP协议 ...

  4. Cookie、Session登陆验证相关介绍和用法

    一.Cookie和Session 首先.HTTP协议是无状态的:所谓的无状态是指每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应直接影响,也不会直接 ...

  5. Session&Cookie 的介绍和使用

    Session介绍与使用 1.Session基本介绍 Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序 ...

  6. Introduction and use of Cookie and Session(Cookie&Session的介绍和使用)

    一.Cookie 1.什么是Cookie? Cookie是HTTP协议的规范之一,它是服务器和客户端之间传输的小数据. 首先由服务器通过响应头把Cookie传输给客户端,客户端会将Cookie保存起来 ...

  7. 简单介绍session,cookie,token以及区别

    Cookie简介 ①.是由服务器发给客户端的特殊信息,以文本的形式存放在客户端 ②.客户端再次请求的时候,会把Cookie回发给服务器 ③.服务器接收到后,会解析Cookie生成与客户端相对应的内容 ...

  8. session与cookie的区别---

    session和cookie的最大区别在于session是保存在服务端的内存中, 而cookie保存与浏览器或客户端文件里面: session是基于访问的进程,记录了一个访问的开始到结束,当浏览器或进 ...

  9. 转!!深入理解 Session 与 Cookie

    摘要 Session 与 Cookie 不管是对 Java Web 的初学者还是熟练使用者来说都是一个令人头疼的问题.在初入职场时恐怕很多程序员在面试的时候都被问到过这个问题.其实这个问题回答起来既简 ...

随机推荐

  1. java 获取网络地址图片

    收藏一个获取网络图片的方法. //获取网络图片 public void ImageRequest(String ImageName,String GifUrl) throws Exception { ...

  2. 【转载】BootStrap表格组件bootstrap table详解

    (转载,来源“脚本之家”,作者不详) 一.Bootstrap Table的引入 关于Bootstrap Table的引入,一般来说还是两种方法: 1.直接下载源码,添加到项目里面来.由于Bootstr ...

  3. 重构指南 - 封装集合(Encapsulate Collection)

    封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...

  4. keepalived+nginx 高可用集群

    一.什么是高可用?   nginx做负载均衡,能达到分发请求的目的,但是不能很好的避免单点故障. 1.nginx集群单点问题 分发器宕机怎么处理? 假如nginx服务器挂掉了,那么所有的服务也会跟着瘫 ...

  5. 牛客提高R5 A.同余方程

    题意 题目链接 Sol 设\(solve(x, y)\)表示\(i \in [0, x], j \in [0, y]\)满足题目要求的方案数 首先容斥一下,\(ans = solve(r_1, r_2 ...

  6. C语言入门(一)环境搭建

    1. 下载Code::Blocks(源文本编辑器) 2. 下载编译器MinGW(或者下载好自带编译器的codeblocks) http://jingyan.baidu.com/article/c843 ...

  7. javascript实现数据结构:稀疏矩阵的十字链表存储表示

    当矩阵的非零个数和位置在操作过程中变化大时,就不宜采用顺序存储结构来表示三元组的线性表.例如,在作“将矩阵B加到矩阵A上”的操作时,由于非零元的插入或删除将会引起A.data中元素的移动.为此,对这种 ...

  8. jQuery动态添加删除CSS样式

    jQuery框架提供了两个CSS样式操作方法,一个是追加样式addClass,一个是移除样式removeClass,下面通过一个小例子讲解用法. jQuery动态追加移除CSS样式 <!DOCT ...

  9. AOP的实现

    AOP基于xml配置方式实现 Spring基于xml开发AOP 定义目标类(接口及实现类) /** * 目标类 */ public interface UserService { //业务方法 pub ...

  10. Python装饰器AOP 不定长参数 鸭子类型 重载(三)

    1 可变长参数与关键字参数 *args代表任意长度可变参数 **kwargs代表关键字参数 用*args和**kwargs只是为了方便并没有强制使用它们. 缺省参数即是调用该函数时,缺省参数的值若未被 ...