cookie与session区别和联系 session和cookie的区别

我在做面试官的时候,曾经问过很多朋友这个问题:和有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 ?什么是 ?两者的区别等 。
但如果再往深入探讨的话,就慢慢有一些朋友不太了解了,谈起原理时就很少有朋友全部回答准确 。今天和大家一起深入聊聊有关和的话题。
什么是和?初级程序员高频面试题 。
什么是
HTTP (也叫 Web 或浏览器 )是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上 。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态 。使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能 。
主要用于以下三个方面:
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)
什么是
代表着服务器和客户端一次会话的过程 。对象存储特定用户会话所需的属性及配置信息 。这样,当用户在应用程序的 Web 页之间跳转时,存储在对象中的变量将不会丢失,而是在整个用户会话中一直存在下去 。当客户端关闭会话,或者超时失效时会话结束 。
和有什么不同?
作用范围不同,保存在客户端(浏览器),保存在服务器端 。
存取方式的不同,只能保存 ASCII,可以存任意数据类型,一般情况下我们可以在中保持一些常用变量信息,比如说等 。
有效期不同,可设置为长时间保持,比如我们经常使用的默认登录功能,一般失效时间较短,客户端关闭或者超时都会失效 。
隐私策略不同,存储在客户端,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在中导致信息被窃取; 存储在服务端,安全性相对要好一些 。
存储大小不同,单个保存的数据不能超过 4K,可存储数据远高于。
前两层楼内容,绝大部分同学都可以准确回答
为什么需要和 ,他们有什么关联?
说起来为什么需要,这就需要从浏览器开始说起,我们都知道浏览器是没有状态的(HTTP 协议无状态),这意味着浏览器并不知道是张三还是李四在和服务端打交道 。这个时候就需要有一个机制来告诉服务端,本次操作用户是否登录,是哪个用户在执行的操作,那这套机制的实现就需要和的配合 。
那么和是如何配合的呢?我画了一张图大家可以先了解下 。
用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建创建对应的,请求返回时将此的唯一标识信息返回给浏览器,浏览器接收到服务器返回的信息后,会将此信息存入到中,同时记录此属于哪个域名 。
当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在信息,如果存在自动将信息也发送给服务端,服务端会从中获取 ,再根据查找对应的信息,如果没有找到说明用户没有登录或者登录失效,如果找到证明用户已经登录可执行后面操作 。
根据以上流程可知,是连接和的一道桥梁,大部分系统也是根据此原理来验证用户登录状态 。
三层楼的内容,大部分同学可以讲清楚 。
既然服务端是根据中的信息判断用户是否登录,那么如果浏览器中禁止了 ,如何保障整个机制的正常运转 。
第一种方案,每次请求中都携带一个的参数,也可以 Post 的方式提交,也可以在请求的地址后面拼接 xxx?=... 。
第二种方案,Token 机制 。Token 机制多用于 App 客户端和服务器交互的模式,也可以用于 Web 端做用户状态管理 。