Session Cookie Token

简介: Session Cookie Token

为什么需要Session 、Cookie 、 Token ?


早期的互联网相当于一个文件服务器,访问服务器,只是提供了文件浏览功能。每次请求都是一个  HTTP 协议请求,服务器并不知道是谁访问了互联网,后来随着电子商务,论坛等网站的发展,有了用户登录,服务器需要知道是谁登录了网站。怎么解决这个问题呢?


HTTP 是一个无状态协议,什么是无状态呢?就是说这一次请求和上一次请求是没有任何关联。这种无状态的的好处是快速,坏处是假如我们想要把www.zhihu.com/login.html和www.zhihu.com/index.html关联起来,无关联不能知晓,这次是哪个用户访问了这个网页,页面跳转了,不知道还是不是同一个用户在访问, 因此采用了一些工具和手段将网页关联起来,采用共享信息的办法,让域名下所有网页共享同一个信息,比如说共享用户登录信息。服务器就知道了是谁在访问这个网页了。


Session



Session 和 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态

Session 就是来解决网页共享数据的一种方式,Session 相当于用户的档案库,存储在服务器端,用户的登录信息存储在Session 中,服务器为每个用户分配一个Session ID  ,客户端保存这个SessionID就可以了。客户端退出后,清除Session ,但是因此带来了一个问题 ,如果用户小明访问了服务器 a, 服务器 a 保存了用户的信息,此时跳转到另外一个页面,这个页面在服务器 b, 要无缝连接,客户端无感知,只能服务器 b 的 session 保存小明的信息,验证登录用户还能不能访问服务器,否则只能让小明就不能访问服务器 b,用户需要重新登录。



这也是 Session 的缺点,不容易在多台服务器之间共享。

Session 不方便服务器之间的同步,怎么办? 服务器端能不能不保存 Session,客户端保存就可以了,服务器只要验证就行了。


Cookie

Cookie 通俗点说,就是用户通过 HTTP  访问一个服务器时,这个服务器还会将一些 Key/Value 键值对返回给客户端浏览器,客户端浏览器下次访问服务器时,将Cookie 带回给服务器。服务器不存储用户的登录信息,通过验证 Cookie 信息来确认是不是保持着用户和服务器直接的交互状态。


HTTP 访问的过程


  • 首先,客户端会发送一个http请求到服务器端。
  • 服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了sessionId。Set-Cookie格式如下:


Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
  • 在客户端发起的第二次请求,假如服务器给了set-Cookie,浏览器会自动在请求头中添加cookie
  • 服务器接收请求,分解cookie,验证信息,核对成功后返回response给客户端


640.png



Cookie 是保存在客户端的,避免了 Session 存储在服务器端带来了资源开销,也避免了服务器之间共享 Session , 但是也有缺点,使用 Cookie 来传递消息,随着 Cookie 数量的增多和访问量的增加。占用网络带宽消耗很大。但是一旦客户端被劫持,Cookie 信息泄露,就可能会出现其他用户盗用 Cookie 信息, 网站登录身份从游客变成了用户登录了,造成用户信息全部泄露。那有什么办法让 访问更加安全一些呢?


Token


Token 和 Cookie 有点类似,用户访问服务器时,服务器返回一个 Token ,用户下次访问时,将这个 Token 信息带回给服务器,这样就能完成验证了。只是和 Cookie 不一样的是,Cookie 携带的是明文信息,Token 对信息进行了处理。

用户访问服务器,服务器返回 Token ,这个Token 是用服务器的密钥进行加密的,对数据进行一个签名,秘钥只有服务器知道,别人就不能伪造 Token 信息了,用户再把 Token 信息带过来时验证就可以了。(是不是想说,用户怎么知道服务器是不是别人伪造了,这就牵扯 公钥私钥了,这里就不深入了),总之,服务器可以确认,用户的请求不是伪造的了。比Cookie 就相对安全了。


Token 访问过程


  • 用户通过用户名和密码发送请求服务器程序验证。
  • 服务器程序返回一个签名的token 给客户端。
  • 客户端储存token,并且每次用于每次发送请求。
  • 服务器验证token并返回数据。
相关文章
|
3月前
|
存储 前端开发 Java
【SpringMVC】——Cookie和Session机制
获取URL中参数@PathVarible,上传文件@RequestPart,HttpServerlet(getCookies()方法,getAttribute方法,setAttribute方法,)HttpSession(getAttribute方法),@SessionAttribute
|
4月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
129 4
|
4月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
5月前
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
354 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
5月前
|
存储 安全 数据安全/隐私保护
Cookie 和 Session 的区别及使用 Session 进行身份验证的方法
【10月更文挑战第12天】总之,Cookie 和 Session 各有特点,在不同的场景中发挥着不同的作用。使用 Session 进行身份验证是常见的做法,通过合理的设计和管理,可以确保用户身份的安全和可靠验证。
111 1
|
6月前
|
存储 缓存 数据处理
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
本文介绍了PHP会话控制及Web常用的预定义变量,包括`$_REQUEST`、`$_SERVER`、`$_COOKIE`和`$_SESSION`的用法和示例。涵盖了cookie的创建、使用、删除以及session的工作原理和使用,并通过图书上传的例子演示了session在实际应用中的使用。
php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07
|
6月前
|
存储 安全 NoSQL
Cookie、Session、Token 解析
Cookie、Session、Token 解析
149 1
|
6月前
|
存储 前端开发 Java
JavaWeb基础7——会话技术Cookie&Session
会话技术、Cookie的发送和获取、存活时间、Session钝化与活化、销毁、用户登录注册“记住我”和“验证码”案例
JavaWeb基础7——会话技术Cookie&Session
|
7月前
|
存储 JavaScript 前端开发
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
Cookie 反制策略详解:Cookie加解密原理、Cookie和Session机制、Cookie hook、acw_sc__v2、jsl Cookie调试、重定向Cookie
489 1
|
7月前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
109 1