session与cookie

前言

我下面的故事是自己由别人的思路编的,故事思路是模仿小奇,很有意思的一个博主,你百度搜一下就行,我编的不好,说实话我自己都看不下去,我花黑线的都是重点,这些题的答案都是我自己说的,主要是便于理解但,是如果你连基本的客户端与服务端都扯不清,就不要看了

水文

你叫老六,在一个晴朗的星期天,你拿着手中已经满是皱纹的简历去一个不大不小的园区,心中一直有个疑问,为什么我会被安排在星期天来面试呢(其实我也想问不应该在线上面吗),算了不管了,来都来了。你赶紧啃完最后几口的馒头,是的已经穷的只能吃馒头了。

刚进去,OL小姐姐就开始领着你往面试场地前进,你不合时宜的问小姐姐:有没有水,是的,你想喝水,快噎死了。后者有点嫌弃的给你倒了一杯水,然后就来到了面试场地。

进来之后,是两个男的坐在那里,其中一个正在眯着眼瞅你,你看了一眼时间,还好,还有半分钟,于是你就把简历交给了面试官。

面试官看了一会,用一种不可置信的眼神看着你,怪不好意思的。但又仔细一瞧,那眼神不太对劲呀,好似狡黠的猎手盯上猎物一般,“咳咳咳”,终于要开始了吗。

面试官:老六,你这名字。。。。。。。。。。,咳咳咳,我看你上面说你精通Session和Cookie,这东西有什么好精通的,算了,你就说说这两个东西都是干什么的,也就是他们为什么被创造出来。

我来个去去,本来就菜,学的东西不多,我写个精通怎么了,怎么了,

老六:cookie主要存在于浏览器,用户请求服务器时,服务器会向浏览器发送一部分数据。这部分数据就是cookie,下一次再向同一服务器发送请求时,它会被一起带到服务器去,服务器通过验证查看是否来自同一浏览器,它使得无状态的HTTP协议记录稳定的状态信息
至于session,怎么说呢,但客户端发送请求给服务端时,在服务端会存储用户的详细信息,就是sessions,如果说cookie是通行证的话,那么session就是客户的详细信息,通过对比来确定客户身份。而且用户在同一应用程序的不同web之间相互跳转时,session里的变量是不会丢失的,只有当客户端关闭会话,或者session超时失效会话才会结束。

面试官:嗯,那他们两者的区别呢

我草我说的那么详细,你就不会自己总结吗,什么都让我说。。。。。。。

老六:作用范围肯定不同呀,cookie在客户端,session在服务端。
存取方式也不同:cookie只能存ASCII,session可以存任意数据类型
有效期不同:cookie可以长时间保存,我们平常的默认登录,session时间较短,前面说了客户端关闭了或者session超时它就会失效
隐私策略不同:cookie在客户端,容易遭到不法获取,session存储在服务器上,比较安全
存储大小不同:单个cookie保存的数据不能超过4K,session存储的数据就远高于cookie

面试官:不错呀,小伙子,该说的都说了,那既然说完区别了,你就再说说他们的联系

我踏吗。。。。。。。。。。

老六:前面其实也提到过,我就详细说一下这个过程吧,当浏览器第一次向服务器发送请求后,服务器根据用户提交的相关信息(假如就是你的用户名以及密码),创建对应的session,请求返回时,session唯一的标识sessionid返回给浏览器,浏览器接收到sessionid后就把此信息存到cookie中,cookie也会记录sessionid属于那个域名。
当用户第二次请求服务器时,请求自己会先判断这个域名是否在cookie中有记录,如果有,就把cookie一块发送给服务器,服务器从中获取sessionid,在根据sessionid查找对应的session,如果没有就说明用户没有登录或者登录失效,如果有就说明已经登录可以开始后序操作。

面试官:很好,那如果我让浏览器禁止了cookie,又该怎么保证这个机制的正常运转呢

我草,得寸进尺是吧,我不面了你信不信,算了我还想以后吃包子呢。

在想的间隙,老六的脸色不太对,这引起了面试官的注意,只见面试官邪魅一笑,像是感觉自己终于问的老六不会似的,老六一看就来火,但是又不能让自己被小瞧了,因为包子比馒头好呀

老六:我有两种方案,我们前面也说到了sessionid,既然cookie不存了,我们完全可以加一个参数sessionid,在每次请求时都携带这个参数,也可以使用Post请求提交,也可以在请求的后面拼接xxx?SessionID=123456…
另一种方案是:Token机制,Token机制多用于APP客户端和服务端交互的模式,也可以用于web端做用户的状态管理
Token的意思是“令牌”,是服务端生成的一串字符串,是客户端请求的一个标识,和sessionid很相似。当用户第一次登录时,服务器生成一个Token。响应时将这个Token返回给客户端,以后客户端就可以带着这个Token来请求数据,而且无需登录验证。

面试官:还以为你不会呢,回答的挺精彩呀,但是不要窃喜,嘿嘿,我还要接着问

不要问我为什么这个面试官只问cookie和session,你就当他脑子有病

面试官:现在分布式应用广泛,广大互联网公司为了可以支撑更大的流量,往往就部署多台服务器来支撑前端的用户请求,假设用户在服务器A登陆了,第二次请求就跑到服务器B就会出现登录失败,那怎么考虑这个分布式的session问题呢。

果然,越来越得寸进尺了

老六深吸一口气:

Nginx ip_hash策略,服务端使用Nginx代理,每个请求按照访问ip的hash分配,这样就可以使来自同一IP固定访问一个后台服务器,就不会出现在服务器A中创建session,第二次就跑到B的情况了 第二种就是session复制,任何服务器的session发生改变(增删改),该节点就会把这个session所有的内容序列化,然后广播给其他节点,所有节点就可以维持一致了,就算跑到服务器B上,一样可以登录 第三种就是共享session,服务器无状态的话,就将用户的session等信息使用缓存中间件来统一管理,就可以保证分发到每一个服务器的相应结果都一致。 建议第三种方案

面试官听完后有点激动,静止了几秒,说:太棒了,我对你很满意,不过在谈论薪资之前,我想问问你是怎么做到把知识学习的折磨细致的。

老六:这就显得你孤陋寡闻了,现在外面我的名号那可是响当当的,我这一身本领都是我自己实践的,如果你以我为标准,就去读读《老六的自我修养》吧,我都觉得这本书拿不到罗贝尔文学奖。。。。。

面试官见老六停不下来了,赶忙说道:我们还是来谈谈薪资吧,你觉得你的薪资应该多少

老六:终于到了最喜欢的环节了, 不多100w+

面试官一脸黑线:咳咳咳,我想问问你面试几家了,

老六:这个星期已经20多家了,我感觉我说的都没问题,为什么都没消息呢

面试官整理一下自己的情绪,怕忍不住

面试官:我们再考虑考虑,你回去等等通知

老六:唉,好吧,

面试官见老六一直扭扭捏捏,就又问:还有什么问题吗

老六:我想说你能不能不要在我的简历上画了,还是还给我吧,我下午去其他公司还要用呢,现在外面打印一张要1块钱呢

面试官拿起准备多时的棍子:我说你的简历咋折磨皱皱巴巴的,原来你一直只用一个呀。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值