保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

前端面试CookieSession和Token的工作原理是什

  前言
  Web诞生之初,功能比较单一:允许Internet上任意一个用户都可以从许多文档服务计算机的数据库中搜索和获取文档。服务器不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议,即请求加响应,服务器不用记住是谁刚刚发了HTTP请求,每个请求对服务器来说都是全新的。
  随着交互式Web应用的兴起,网站有了登录的需求,如在线购物网站,社交网站等等。这就面临一个问题,服务器必须记住哪些人登录了系统,哪些人往自己的购物车中添加了商品,也就是说服务器要识别每个用户。
  因为HTTP请求是无状态的,所以想出的办法就是给大家发一个会话标识(sessionid),说白了就是一个随机的字串,每个用户收到的都不一样。当用户向服务器发起HTTP请求的时候,带上这个字符串,这样服务器就能识别不同的用户了。
  所以就有了Session的引入,即服务端和客户端都保存一段文本,客户端每次发起请求都带着,这样服务器就知道客户端是否发起过请求。
  这样,就导致客户端频繁向服务端发出请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否。而Session的存储是需要空间的,频繁的查询数据库给服务器造成很大的压力。
  随着Web移动端的兴起,这种验证的方式逐渐暴露出了问题。尤其是在可扩展性方面。
  基于服务器验证方式暴露的一些问题
  1。Seesion:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。
  2。可扩展性:在服务端的内存中使用Seesion存储登录信息,伴随而来的是可扩展性问题。
  3。CORS(跨域资源共享):当我们需要让数据跨多台移动设备上使用时,跨域资源的共享会是一个让人头疼的问题。在使用Ajax抓取另一个域的资源,就可以会出现禁止请求的情况。
  4。CSRF(跨站请求伪造):用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站。
  于是有人就一直在思考,服务器为什么要保存这些信息呢,只让每个客户端去保存该多好?
  在这种情况下,Token应用而生。
  Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌。当客户端第一次访问服务端,服务端会根据传过来的唯一标识userId,运用一些算法,并加上密钥,生成一个Token,然后通过BASE64编码一下之后将这个Token返回给客户端,客户端将Token保存起来(可以通过数据库或文件形式保存本地)。下次请求时,客户端只需要带上Token,服务器收到请求后,会用相同的算法和密钥去验证Token。
  下图,第一次时,获得了签名:
  第二次或以后:服务器再次计算获得新签名,看看与客户端带过来的签名是否相等。(虽然带过来的签名也是服务器计算出来的)
  Cookie
  cookie是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。
  cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。
  Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。Cookie存储的数据量有限,且都是保存在客户端浏览器中。不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用Cookie实际上只能存储一小段的文本信息。
  例如:登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是Cookie。Session
  session从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相,口音等)表明他就是张三。
  Session是另一种记录客户状态的机制,它是在服务端保存的一个数据结构(主要存储的SessionID和Session内容,同时也包含了很多自定义的内容如:用户基础信息、权限信息、用户机构信息、固定变量等),这个数据可以保存在集群、数据库、文件中,用于跟踪用户的状态。
  客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
  session也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的身份标识,然后客户端每次向服务器发请求的时候,都带上这个身份标识,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个身份标识,可以有很多种方式,对于浏览器客户端,大家都默认采用cookie的方式。
  服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。
  用户第一次登录后,浏览器会将用户信息发送给服务器,服务器会为该用户创建一个SessionId,并在响应内容(Cookie)中将该SessionId一并返回给浏览器,浏览器将这些数据保存在本地。当用户再次发送请求时,浏览器会自动的把上次请求存储的Cookie数据自动的携带给服务器。
  服务器接收到请求信息后,会通过浏览器请求的数据中的SessionId判断当前是哪个用户,然后根据SessionId在Session库中获取用户的Session数据返回给浏览器。
  例如:购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了Session。
  Cookie和Session比较
  如果说Cookie机制是通过检查客户身上的通行证来确定客户身份的话,那么Session机制就是通过检查服务器上的客户明细表来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
  Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。Token
  Web领域基于Token的身份验证随处可见。在大多数使用WebAPI的互联网公司中,tokens是多用户下处理认证的最佳方式。
  大部分你见到过的API和Web应用都使用tokens。例如Facebook,Twitter,Google,GitHub等。
  最简单的Token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由Token的前几位盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接Token请求服务器)
  基于Token的验证原理
  基于Token的身份验证是无状态的,我们不将用户信息存在服务器或Session中。
  这种概念解决了在服务端存储信息时的许多问题,NoSession意味着你的程序可以根据需要去增减机器,而不用去担心用户是否登录。
  使用基于Token的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:客户端使用用户名跟密码请求登录服务端收到请求,去验证用户名与密码验证成功后,服务端会签发一个Token,再把这个Token发送给客户端客户端收到Token以后可以把它存储起来,比如放在Cookie里或者数据库里客户端每次向服务端请求资源的时候需要带着服务端签发的Token服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据
  每一次请求都需要token。token应该在HTTP的头部发送从而保证了Http请求无状态。我们同样通过设置服务器属性AccessControlAllowOrigin:,让服务器能接受到来自所有域的请求。需要注意的是,在ACAO头部标明(designating)时,不得带有像HTTP认证,客户端SSL证书和cookies的证书。
  实现思路:
  Tokens的优势
  1。无状态、可扩展
  在客户端存储的Tokens是无状态的,并且能够被扩展。基于这种无状态和不存储Session信息,负载负载均衡器能够将用户信息从一个服务传到其他服务器上。
  如果我们将已验证的用户的信息保存在Session中,则每次请求都需要用户向已验证的服务器发送验证信息(称为Session亲和性)。用户量大时,可能会造成一些拥堵。但是不要着急。使用tokens之后这些问题都迎刃而解,因为tokens自己hold住了用户的验证信息。
  2。安全性
  请求中发送token而不再是发送cookie,能够防止CSRF(跨站请求伪造)。即使在客户端使用cookie存储token,cookie也仅仅是一个存储机制而不是用于认证。不将信息存储在Session中,让我们少了对session操作。
  token是有时效的,一段时间之后用户需要重新验证。我们也不一定需要等到token自动失效,token有撤回的操作,通过tokenrevocataion可以使一个特定的token或是一组有相同认证的token无效。
  3。可扩展性
  Tokens能够创建与其它程序共享权限的程序。例如,能将一个随便的社交帐号和自己的大号(Fackbook或是Twitter)联系起来。当通过服务登录Twitter(我们将这个过程Buffer)时,我们可以将这些Buffer附到Twitter的数据流上(weareallowingBuffertoposttoourTwitterstream)。使用tokens时,可以提供可选的权限给第三方应用程序。当用户想让另一个应用程序访问它们的数据,我们可以通过建立自己的API,得出特殊权限的tokens。
  4。多平台跨域
  我们提前先来谈论一下CORS(跨域资源共享),对应用程序和服务进行扩展的时候,需要介入各种各种的设备和应用程序。
  只要用户有一个通过了验证的token,数据和资源就能够在任何域上被请求到。AccessControlAllowOrigin:
  App示例:
  APP登录的时候发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果成功,以某种方式比如随机生成32位的字符串作为Token,存储到服务器中,并返回Token到APP,以后APP请求时,凡是需要验证的地方都要带上该Token,然后服务器端验证Token,成功返回所需要的结果,失败返回错误信息,让他重新登录。
  对于同一个APP同一个手机当前只有一个Token;手机APP会存储一个当前有效的Token。其中服务器上Token设置一个有效期,每次APP请求的时候都验证Token和有效期。

2018年写父亲节作文600字给爸爸的礼物父亲节快到了,好想送礼物给爸爸。但是要送什么?我和姐姐都在烦恼这件事。我们从爸爸平常最宝贝的东西,寻找线索,到底什么是爸爸的宝贝呢?爸爸的宝贝当然就是我们两个了,因为他很……初雪品学网专稿未经允许不得转载初冬的一个早上,我仍和往常一样背着书包去上学。刚推开房门,噢,下雪了,入冬以来的第一场雪。满街面上一片白,天空仍在不停的下hellip;hell……争当四好少年小学作文范文生命是宝贵的,人的一生就只有一次生命,我们应该珍爱生命。文明守法,遵守交通规则也是珍爱生命的一个重点。现在因为交通事故而死亡的人有许多,难道你不觉得他们死得太冤枉了吗?因此,遵……触动心灵的回忆呼呼多彩绚丽的泡泡随风飘动,妈妈,漂亮吗。今天是妈妈的生日,这是我和姐姐一起准备的节目哦。一个小女孩发出稚嫩的声音,那个小女孩就是我。妈妈被泡泡包围着,露出欣慰的笑容,张开的嘴……goexec执行命令,设置超时我们在使用go执行命令的时候,需要设置超时时间,避免一直卡死。go里面超时最常用的就是context。下面通过一个context的例子演示一下,如何使用context完成exe……马良神笔500字作文还记得有一个美丽的传说,善良的马良拥有一只神笔,为人民做了很多好事,还智斗恶人。为学业勾勒成功,那必然是众多学子的一个美好而遥远的梦想。但是,但是!!如今那个美好而遥远的……中秋赏月小学生作文晚上,闲着没事,一个人实在无聊,于是就漫步在家后面的小树林中,独自享受着那夜色之美。抬头望着寂静夜空,可爱的月亮从树梢后慢慢地爬上半空,光亮、圆润,像一教书育人玉琢的盘子。温柔……描写荷花的作文四百字荷花用途之广,品格之高,是百花不可比拟的。让我们都来仰慕荷花,大力养殖荷花吧!如下是小编给大家整理的描写荷花的作文,希望对大家有所作用。描写荷花的作文篇【一】走近荷花池,……神奇的站立鸡蛋四年级作文我非常喜欢吃鸡蛋,炖鸡蛋,煮鸡蛋,鸡蛋汤等等凡是用鸡蛋做的食物我都爱吃。可是我发现生鸡蛋放到哪儿,总是懒洋洋地躺着,能不能把一个生鸡蛋立在桌面上呢?带着这个疑问我做了这个实验。……浪潮信息刘军智算中心是东数西算提质量调结构的体现随着中国数字化转型的升级加速,优化升级数字基础设施已经成为发展数字经济的重点任务之首。目前,全国一体化大数据中心算力枢纽体系完成总体布局设计,东数西算工程已正式全面启动,加快推……我的偶像易烊千玺优秀作文800字导语:人人都说,今天你崇拜的偶像也许明天你就会是明星,只要努力,向前奋斗,没有什么事情是完不成的。下面是小编整理的一些关于偶像的作文,欢迎查阅,谢谢。篇一:我的偶像易烊千玺……微波炉哪个品牌质量最好?推荐品牌:1、格兰仕Galanz(创于1978年,中国驰名商标,中国家电业最具影响力的龙头企业之一,广东格兰仕集团有限公司)2、美的Midea(始于1981年,中国……
vue中父组件如何动态修改子组件的值?1。使用ref修改refs:在Vue中,父组件可以通过refs来管理通过ref注册过的所有子组件,即refs对象下可以包含很多ref对象。创建两个组件分别是父……2021鬼节具体时间今年鬼节是什么时候20xx鬼节具体时间鬼节20xx年鬼节时时间为20xx年9月5日农历七月十五鬼节是民间的叫法,也叫中元节,七月半,亡人节时间是每年农历7月十五。但举行祭祀的时……教师节作文老师,我想对您说亲爱老师,在这里我代表全班同学向你说声谢谢,并祝你越活越年轻。以下是写想对老师说的作文,大家一起阅读吧!老师,我想对您说篇一炎热的夏天过去了,秋姑娘迈着轻盈的步伐来……我家买车六年级作文700字随着科技的飞速发展,人民生活的飞速提高。车再也不是一种奢侈品。它成为了现代人民的代步工具之一,几乎每个家里都有一辆。这不,在一年多前,我家也购了一辆。这是一辆非常之大气的……爷爷的手400字作文五篇篇一:爷爷的手我的爷爷是一个和蔼可亲的人,他无论在学习,还是在生活上,都能帮助我。爷爷还会拉大提琴,弹三弦和阮,你说他厉不厉害?而最让我难忘的却是爷爷那双饱经沧桑得……沙漠死寂世界也有生命作文烈日,无情地炙烤着大地,热气在翻滚,黄色的大道上,一片死气沉沉的气氛。沙漠一望无际,一片片此起彼伏的沙丘,衬托着几片难见的泥土。上面仅有的几棵小草也像病了似的,那垂落的焦……未来城体验三年级作文在阳光明媚的一个早晨,我和妈妈去了未来城,去体验不同的职业。刚到未来城看到了我班的同学在体验特警的职业,看着他穿着特警的衣服,手里还拿着一把枪,真的太帅了,我当时非常想去……什么是发动机防盗系统?作用原理是什么?你好,汽车防盗系统是一套防止汽车被偷盗,非法移动和防止车内的物品丢失的系统。当前按照结构可以分为三种:机械式、电子式和网络式。其中,机械式防盗系统已经被淘汰,比方向盘锁、车轮锁……申爷爷300字作文去年暑假的一天,邻居申爷爷见我放了假,就带我到十字路口和他一同值班,去见见世面。申爷爷戴上红臂章,拿着一面小红旗站在路边维持交通秩序。这时,开来一辆汽车,只见申爷爷把小红……音乐发烧友都在用什么设备听歌?我不算烧友,但是我用的系统都算声音杠杠的!1)随身系统:铁三角M50监听耳机,乂度xD05解码耳房,Hifiman601先锋XR1播放器。有时用苹果做数播转盘接乂度解码耳放。还……靠谱的台式电源有哪些推荐?除了性能之外,游戏玩家非常关注的一点就是整机的稳定性了,如果关注高端玩家的配置单,我们会发现,不仅CPU和显卡占据了一大部分预算,老鸟的电源选择也是有讲究的,有的电源甚至超过了……我的一场梦三年级作文啊!我在尖叫声中惊醒,看着沙滩上一只只横行的螃蟹,和天空中正在飞翔的鸥鸟。这里是哪里?其它的人呢?这里会有狮子、老虎或大象吗?会有时人族吗?好奇的我,立刻以迅雷不及掩耳的速度,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网