当面试官让你说一下对session跟cookie的看法,一般的程序员会这样回答,cookie是存在浏览器端的,session是存在服务器端的,cookie可以存一些用户的状态啊,blabla。。。
好的程序员会这样回答。
第一,http协议是无状态的,当我们在开发一些对状态有要求的接口时,cookie跟session弥补了这一块的能力。
第二,对于http协议,cookie只是请求头当中的一个字段,他跟http协议请求头当中的其他字段并没有太大的区别,特别当我们把它放在四层tcp的角度来看,那么http的请求头和请求体更没有什么大的区别,
第三,浏览器对cookie做了默认的支持,同时也限制了cookie比如同源策略,同源策略是浏览器基于安全的角度的一个机制,限制的同域才能访问cookie的内容,对于同域的定义就是相同的协议,域名和端口。这个时候当我们在做单点登录sso功能得时候,就会考虑把cookie种在可访问的域下面。比如把cookie种在一级域名下面。
第四,说完cookie我们来说session,session是服务器为每一个web用户分配的独立的状态存储空间,那么这里有个问题,用户的状态信息存在某个个别的服务器上面了,当我是单台机器提供服务的时候那么问题还好,但是当我们以七层或者四层转发请求到后端集群的时候,就存在session命中的问题,这个时候我们需要通过有中心的方式,去解决这个问题,比如将session信息存在mysql或者redis里面。
好了,回答问题的框架已经出来了,回过头来,cookie跟session本质上是辅助http协议的无状态性,那么我们通过其他方式能不能解决这个问题呢,这就留给你想了。
好的程序员跟一般的程序员的差别,在对一个知识点理解的程度,以及本质不一样,在问你一个问题,我们都知道,tcp协议建立连接需要三次握手,那么为什么是三次,以及我两次或者四次五次六次七次可以吗。