当前位置:首页 > 技术分析 > 正文内容

cookie、session、token

会话

会话是浏览器和服务器之间的多次请求和响应,也就是说,从浏览器访问服务器开始,到访问服务器结束,浏览器关闭为止的这段时间内容产生的多次请求和响应,合起来叫做浏览器和服务器之间的一次会话。

HTTP无状态

网页之间的交互是通过HTTP协议传输数据的,而Http协议是无状态的协议,数据提交后,浏览器和服务器的链接就会关闭,服务器无法确认用户的信息。

Cookie概念(客户端会话技术)

Cookie是一个服务器发送给浏览器,在浏览器上保存的一个小文件。浏览器第一次访问服务器时,服务器会校验用户名和密码是否存在,如果存在则生成一个cookie,cookie上记录着用户名和密码,把小文件发送给浏览器保存。

注意:

  1. Cookie具有不可跨域名性
  2. HTTP协议不仅是无状态的,而且是不安全的!如果不希望Cookie在非安全协议中传输,可以设置Cookie的secure属性为true,浏览器只会在HTTPS和SSL等安全协议中传输该Cookie

Session概念(服务器会话技术)

Session是用来将数据存储与服务器端的技术,服务器会为每次会话建立一个sessionId,每个客户会跟一个sessionID对应。session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。

注意

  1. Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,无论是否对Session进行读写,服务器都会认为Session活跃了一次。
  2. HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一个用户。于是乎:服务器向用户浏览器发送了一个名为JESSIONID的Cookie,它的值是Session的id值。其实Session依据Cookie来识别是否是同一个用户

Cookie和Session的区别

-

Cookie

Session

存储方式

只能存储字符串

可以存储任何类型的数据

隐私安全

存储在浏览器中,对客户端是可见的。信息容易泄露出去

存储在服务器上,对客户端是透明的。不存在敏感信息泄露问题

有效期

保存在硬盘中,设置maxAge属性,即使关闭浏览器,Cookie还是存在的

保存在服务器中,设置maxInactiveInterval属性。并且依赖名为JSESSIONID的Cookie

服务器负担

保存在客户端的。不占用服务器的资源

保存在服务器的,每个用户都会产生一个Session,如果是并发访问的用户非常多,会消耗大量的内存

浏览器支持

如果浏览器禁用了Cookie,那么Cookie是无用的

如果浏览器禁用了Cookie,Session可以通过URL地址重写来进行会话跟踪

跨域名

可以设置domain属性来实现跨域名

不可跨域名

Token概念

在用户登录成功之后,服务端会根据传过来的唯一标识userId,运用一些算法,并加上密钥,生成一个Token,然后通过BASE64编码一下之后将这个Token返回给客户端,客户端将Token保存起来。下次请求时,客户端只需在header里边带上token,服务器收到请求后,会用相同的算法和密钥去验证Token,如果两者一致,则请求成功,否则失败。使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录,以CPU换内存。

最简单的Token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由Token的前几位+哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接Token请求服务器)。

大致流程

  1. 客户端使用用户名跟密码请求登录
  2. 服务端收到请求,去验证用户名与密码
  3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
  4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者数据库里
  5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
  6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/4809.html

标签: token和session
分享给朋友:

“cookie、session、token” 的相关文章

79.idea中git合并分支操作分享

文章目录前言1.fetch的操作2.合并最新代码到当前的开发分支3.解决冲突4.分支合并:5.完成代码合并总结前言git的操作在日产的工作中也非常重要,团队化的代码管理,每次如果代码被别人覆盖或者自己的代码不能提交到服务器那是灾难性的结果,本篇进行一篇分享来总结下idea中git的操作帮助java开...

最快清除数组空值?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!大家好,我是大澈!本文约 600+ 字,整篇阅读约需 1 分钟。今天分享一段优质 JS 代码片段,用最简洁的代码清除了数组中的空值。老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!const arr...

22《Vue 入门教程》VueRouter 路由嵌套

1. 前言本小节我们介绍如何嵌套使用 VueRouter。嵌套路由在日常的开发中非常常见,如何定义和使用嵌套路由是本节的重点。同学们在学完本节课程之后需要自己多尝试配置路由。2. 配置嵌套路由实际项目中的应用界面,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层...

Vue真是太好了 壹万多字的Vue知识点 超详细!

1??、Vue和其他两大框架的区别Angular 学习成本太高React 代码可读性差Vue 学习成本较低 很容易上手VUE官方: https://cn.vuejs.org/v2/guide/comparison.html?2??、Vue是什么Vue是一套用于构建用户界面的渐进式框架 "前端...

三勾商城(java+vue3)微信小程序商城+SAAS+前后端源码

项目介绍本系统功能包括: 前台展示+后台管理+SAAS管理端,包括最基本的用户登录注册,下单, 购物车,购买,结算,订单查询,收货地址,后台商品管 理,订单管理,用户管理等等功能,小伙伴一起来看看吧。三勾小程序商城基于springboot+element-ui+uniapp打造的面向开发的小程序商城...

微信将研发“应用号”体系 或成为App大杂烩应用

Akiha发表于 2016-01-11 18:11微信正在探讨一种新的公众号形态,即在现有的订阅号、服务号之外,再研发新的“应用号”体系。让用户不必去装各种 App,在微信里就能实现各种服务、功能;关注后,“应用号”平时不向用户发送消息,需要时,用户再去点开“应用号”等。目前,微信钱包内已有的服务,...