Cookie、Session是如何保持登录状态的?

无论是web应用还是原生app应用,只要涉及网络连接,基本就离不开登录注册,我们注册完成后登录,这个状态就被保持下来了,我们下次打开app,应用就已经处于登录状态了,不需要我们重复登录,非常人性化,感觉服务器好像会“记得”我们每一个人一样,“记得”你来过,就不再要求你登录了。但其实计算机在这方面是很傻的,他不是自发“记得”我们的,这篇文章就来聊聊登录状态的保持是怎么实现的。

HTTP协议

要弄明白下面说的东西,就得先了解一下HTTP协议,繁琐的概念就不多赘述了,这里主要注意一点,HTTP协议是无状态的 ,什么叫无状态?我们从一个故事讲起:

你去一家水果店买水果,你看到他们的桃子很鲜美,于是你大赞了老板的桃子后并买了一斤。你回家尝了桃子后觉得非常好吃,你决定第二天继续购买。当你第二天开开心心的过来找老板,跟他说“你家的水果真的很好吃,再来一斤我昨天买的那个水果”,但是发现老板并不知道你昨天买过什么,于是你非常生气,跟老板说“我昨天还夸了很久你的水果,你怎么就不记得了?”一顿理论后你发现老板始终不记得你昨天干过什么事,最后你只好跟老板表明要买一斤桃子,交易后灰溜溜地离开。

这个故事中的老板就是无状态的,对他来说,他只知道某个人要买什么东西,给了多少钱,要买什么水果,要找多少钱,对于过程中的其它信息如是“谁”来买,他不会记得,他只会针对买卖本身进行处理。

HTTP为什么无状态?

  • 首先什么是无状态?
    无状态就意味着每个请求之间的不会直接地相互影响,对于每个请求,同样的请求参数就会得到同样的结果。

  • 回到HTTP协议中:
    最初的需求是请求HTML界面显示出静态网站,并不如现在那么复杂丰富,用户A点击某个网址浏览到的页面和用户B点击同样网址浏览到的页面是完全一模一样的,也就是服务器并不会对每个不同的人有特殊处理,服务器只对请求负责,不对发起请求的人负责。因此在HTTP设计中,每个请求都是独立的,每个请求中都包含了请求的所有数据,服务器只对请求和请求中携带的信息进行处理后返回特定结果。就如上面的那个水果店,老板只根据要买什么水果,水果多少钱,给了多少钱,进行处理,如果你跟他说你昨天与他交谈如何,他无动于衷,因为他完全不会记得这些事情,他完全不记得你曾来过。

HTTP如何保存登录状态?

前面说到,HTTP是无状态的,每个请求之间的不会直接地相互影响。

当我第一次调用用户名密码验证接口的时候,我需要输入账号、密码,服务器收到请求之后,就会根据账号去数据库取你的密码和你输入的密码进行比对,然后返回一个“密码正确”或“密码错误”。而问题在于当我第二次访问这个接口的时候,服务器依旧会执行他的职能:收到我发送的账号和密码,然后去数据库取数据进行比对后返回比对结果,对于服务器来说,每个请求不过是做了类似1+1是否等于2的判断然后返回结果而已

我想要服务器能够记住我已经调用过一次登录接口并且以及成功了这个状态,应该怎么办?

我们可以很自然的想到,服务器不知道我们登录过的原因是因为没有记下来,要保持登录状态,只要让服务器记下来就可以了。我们可以在服务器专门设置一个存储,每次只要我验证账号和密码成功,就在这个存储里面存下“JabinGP登录成功”(这个JabinGP是用户名),这样我们服务器就记得JabinGP登录过了。

现在服务器已经知道JabinGP登录过了,但是这就够了吗?不够,因为HTTP请求并不会自动标明“这是JabinGP发起的请求”,所以我们还要做点工作让服务器能知道“这是JabinGP发起的请求”,然后服务器才好去存储下来的登录状态里面找“JabinGP登录成功”这个标志。怎么做?我们可以在调用请求的时候把自己的用户名加进请求的参数中,比如Get请求的URl参数、Post请求的请求Body中,这样服务器就可以根据我们的用户名判断我们有没有登录过了。

这样我们就初步的把登录状态保存了下来,其实这样的验证非常粗糙,所以基于这个思想,产生了下面的技术。

什么是Cookie?

有很多品牌的Cookie,比如说蓝罐,广州酒家......什么?哦哦不好意思我搞错了,这个才是Cookie:Cookie就是存储在客户端的一小段数据,它可以存在硬盘中(永久Cookie),也可以存在内存中(临时Cookie)

什么是Session?

Session是指服务器为某个会话开启的一段独特的存储空间(会话是指一个终端用户与交互系统进行通讯的过程,比如说我先登录,再查看我的邮箱内容,这个过程就是一个会话),一个Session用唯一的SessionId对应一段存储空间。

Cookie和Session是怎么用的?

首先从概念上,Cookie和Session都是用来存东西的,问题在于它们都用来存什么,以及它们都做了什么?
结合前面分析:

  • Cookie的出现,代替了手动设置标识的步骤,因为我们可以把标识设置在Cookie里面,设置了Cookie后,Cookie就存在了,下次请求Cookie就会自动发送给服务器,这样我们就不用给每个请求都很麻烦地手动设置一个标识(比如前面分析中的用户名)。
  • Session其实就是代替了在服务器存储状态的步骤,SessionId可以对应一段存储空间,这段空间对每个会话都是唯一的(比如我登录后,就产生了一个会话,也产生了一段存储空间,这段存储空间只被我当前的登录状态下的活动所使用,别人是用不到的),这样就可以确保每个登录状态都有对应的一小段存储空间来写入一些中间过程的数据。

Cookie和Session的关系?

看了上面的Cookie和Session的解释,以及Cookie和Session的使用,就可以发现它们两个其实完全不冲突,甚至这两者是需要相互配合的,因为Cookie是在客户端的存储,Session是在服务端的存储,Session的存储需要SessionId来一一对应,这样才不会出现xxx获得了JabinGP的登录状态然后用JabinGP的钱买东西这样的情况,SessionId则需要通过Cookie保存在用户客户端中,客户端通过保存在Cookie的SessionId来标识自己,表明“我就是JabinGP”。

到这里差不多就简单介绍完Cookie和Session以及登录状态的保持了,以上都是个人理解,用于个人学习记录,如有错误,请一定评论指正!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,376评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,126评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,966评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,432评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,519评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,792评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,933评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,701评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,143评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,488评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,626评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,292评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,896评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,494评论 2 348

推荐阅读更多精彩内容

  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,601评论 1 49
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 2,357评论 1 17
  • 继续这一个系列,基于Token的WEB后台登录认证机制(并讲解cookie和session机制)。每个后端不得不解...
    JackFrost_fuzhu阅读 18,059评论 11 80
  • 以前给她说,害怕被别人喜欢。所以要酷酷的。她说我,神经病。 现在身边闹哄哄的,持续得和不同的人互动着。也不怕被别人...
    杜烦人阅读 152评论 0 0
  • 周末老公孩子去爷爷奶奶家,我一个人窝在家看了《当哈利遇到萨莉》 梅格瑞恩眼睛里有星星✨,闪呀闪呀闪得我好心动啊 嘣...
    cicich阅读 122评论 0 0