Session、Cookie与Token

本文介绍了Session、Cookie和Token的基本概念、作用和区别。Session主要用于服务端保持用户状态,Cookie则是在客户端存储信息以实现状态跟踪,而Token提供了一种无需服务器存储Session信息的身份验证方式。文章详细阐述了它们的起源、生存周期、安全性等方面,并讨论了在Web应用中的应用场景。
摘要由CSDN通过智能技术生成

前言

本文的大概内容:

在浏览网页的时候输入密码会弹出是否保存账号与密码,点击保存 或者点击一段时限免登录,再次上网会保存你上次输入的密码与账号,方便了用户访问,有效避免了用户会忘记密码,但也有弊端就是,下一个人如果登录这个页面出现的用户名并不是他自己的,会泄露隐私。对于互联网行业面试的时候,计网方面的知识也总是离不开Sessio与Cookie,下面就让我们从基本知识与实践来说明二者的区别


一、Session是什么?

Session就是一次浏览器和服务器的交互的对话,就相当于人们打招呼的过程,这段对话完成后,这次会话也就结束了。

起源

在说session是什么之前,我们要清楚为什么会出现session会话,出现的机理又是什么?我们知道,用浏览器打开一个网页,用的是HTTP协议,在web 1.0时期,强调的是资源共享,http协议是一种无状态协议,2.0之后,强调交互,意味着有多一步的操作,请求与被请求之间是有依赖存在的,引入了session和cookie机制来实现状态的记录。

主要作用

HTTP是一种不保存的状态,即无状态协议(stateless)协议。也就是说HTTP协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?Session机制的存在就是为了解决这个问题,Session的主要作用是通过服务端记录用户的状态。典型的场景是登录网站,当你要在网页端登录账号的时候,系统不知道哪个用户操作的,因为HTTP协议是无状态的。服务端给特定的用户创建特定的Session之后就可以标识这个用户并且跟踪这个用户了(一般情况下,服务器会在一定时间内保存这个Session,比如某网站可以勾选十天内免登陆,过了时间限制,就销毁这个Session了,就需要重新登录)。
在服务端保存Session的方法很多,最常用的就是内存和数据库。既然Session存放在服务器端,那么我们如何实现Seesion跟踪呢?

Session跟踪

通过在Cookie中附加一个Seesion ID来追踪Session,Session ID会以类似于cookie的方式返回给客户端,Session ID是服务器用来识别操作存储Session指的对象的服务器端,它就是用来识别这个文件或者识别
数据库的某一条记录,Session ID并不是session的值,有session ID不一定有session


二、Cookie是什么?

Cookie,有时也用复数形式Cookies

  1. 中文译名:小甜饼
  2. 起源:Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入jsessionid,这样服务器可以知道该用户是否合法用户以及是否需要重新登录等。
  3. 客户端(浏览器)在发送请求的时候,会自动将存活可用的cookie封装在请求头中和请求一起发送。
  4. 形式:请求信息头:Cookie -

用途

服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功用。

生存周期

Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。

Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭页面时,就马上清除Cookie,不会记录用户信息,更加安全。
在浏览器中可以定制

脚本攻击

尽管cookie没有病毒那么危险,但它仍包含了一些敏感信息:用户名,计算机名,使用的浏览器和曾经访问的网站。用户不希望这些内容泄漏出去,尤其是当其中还包含有私人信息的时候。

这并非危言耸听,一种名为Cross site scripting的工具可以达到此目的。在受到Cross site scripting攻击时,cookie盗贼和cookie毒药将窃取内容。一旦cookie落入攻击者手中,它将会重现其价值。
cookie盗贼:搜集用户cookie并发给攻击者的黑客。攻击者将利用cookie信息通过合法手段进入用户帐户。
cookie毒药:利用安全机制,攻击者加入代码从而改写cookie内容,以便持续攻击。
Cookie360百科


三、Token是什么?

JWT(JSON Web Token)本质上就是一段签名的JSON格式的数据。由于它是带有签名的,因此接受者可以验证它的真实性。JWT就是一种不需要自己存放Session信息就能实现身份验证。

JWT由三个部分构成:

  1. Header(算法):描述JWT的元数据。定义了生成签名的算法以及Token的类型。
  2. Payload(负载/有效期):用来存放实际需要传递的数据
  3. Signature(签名):服务器通过Payload、Header和一个密钥(secret)Base64编码使用Header里面指定的签名算法(默认是HMAC SHA256)生成。

四、Session与Cookie的区别

特征: session和cookie都是由服务器来生成的,都会用来存储特定的键值对,
生命周期:

  • cookie
    cookie的生命周期受两个因素的影响:cookie自身的存活时间:是服务器生成cookie去设定的,创建开始计时,过期自动销毁。(30min)

客户端是否保留了cookie。客户端是否保留cookie,只对客户端自身有影响,对其他封包工具没有影响
创建开始计时 再访问再重新计时

  • session
    session的生命周期也是收到两个因素的影响:服务器对于session对象的保存的最大时间的设置

cookie和session都是有其作用域的
安全性:
cookie是存储在客户端的,是可见的,是可以改变的,存在客户端(浏览器)设置站点保存20个cookie。
session是存储在服务器端的是不可见的,是不可以改变的 存在服务器端 设置站点无限制。


五、过程

Session进行身份验证
在这里插入图片描述

  1. 用户向服务器发送用户名和密码用于登陆系统。
  2. 服务器验证通过后,服务器为用户创建一个 Session,并将 Session信息存储起来
  3. 服务器向用户返回一个 SessionID,写入用户的 Cookie 当用户保持登录状态时, Cookie将与每个后续请求一起被发送出去
  4. 服务器可以将存储在 Cookie上的 Session ID与存储在内存中或者数据库中的
  5. Session信息进行比较,以验证用的身份,返回给用户客户端响应信息的时候会附带用户当前的状态。

Token进行身份验证
在这里插入图片描述

  1. 用户向服务器发送用户名和密码用于登陆系统。
  2. 身份验证服务响应并返回了签名的JWT,上面包含了用户是谁的内容。
  3. 用户以后每次向后端发请求都在Header中带上JWT。
  4. 服务端检查JWT并从中获取用户相关信息。

总结

以上就是对于Http中的关于Session、Cookie与Token的一些浅显的理解,互联网小白一枚,有错误请批评指正,一起加油!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值