Bootstrap

浅谈cookie 和 session

有时候面试,面试官会问道 cookie和session的区别,那么现在浅谈一下什么是cookie 和 session。

一.、是什么

1. 什么是cookie?

cookie本质是一个存储在浏览器的文本,随着http请求自动传递给服务器。是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。

cookie 的不足 :
  1. 各个浏览器对cookie的数量和大小都有不同的限制,这样就导致我们不能在Cookie中保存过多的信息。一般数量不超过50个,单个大小不超过4kb。
  2. cookie是由服务器发送给浏览器,再由浏览器将cookie发回,如果cookie较大会导致发送速度非常慢,降低用户的体验。

2. 什么是session

Session 是一个对象,存储特定用户会话所需的属性及配置信息。Session 代表着服务器和客户端一次会话的过程。是保存在服务器端的数据.(保存介质, 文件、数据库、内存),当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当客户端关闭会话,或者 Session 超时失效时会话结束。

session的不足 :
  1. Session变量和cookies是同一类型的。如果某用户将浏览器设置为不兼容任何cookie,那么该用户就无法使用这个Session变量!
  2. 如果在Session中置入了较大的对象(如ADO,recordsets,connections, 等等),随着站点访问量的增大,服务器将会因此超过负载,无法运行。

二、cookie 和 session 的不同

  1. 作用范围不同,Cookie 保存在客户端(浏览器),Session 保存在服务器端,一个session域对象为一个用户浏览器服务。
  2. 安全性:(https证书),cookie是以明文的方式存放在客户端的,安全性较低,可以通过一个加密算法进行加密后存放。session存放于服务器中,所以安全性较好
  3. 存取方式的不同,Cookie 只能保存 ASCII,Session 可以存任意数据类型,一般情况下我们可以在 Session 中保持一些常用变量信息,比如说 UserId 等。
  4. 有效期不同,Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭或者 Session 超时都会失效。
  5. 网络传输量不同,cookie会传递消息给服务器,session本身存放于服务器,但是通过cookie传递id,会有少量的传送流量
  6. 大小不同,cookie 保存的数据不能超过4K,很多浏览器都限制一个站点最多保存50个cookie。session 保存数据理论上没有任何限制

三、cookie 和 session 的关联

首先,先上一张图,直观的查看两者的关联。
在这里插入图片描述
当用户第一次请求服务器的时候,服务器根据用户提交的内容,创建相对应的session,之后服务器将session的标识sessionId返回给浏览器,浏览器将sessionId存入到cookie中,与此同时cookie将会sessionId属于哪一个域名记录下来。
当用户第二次请求服务器的时候,请求就会自动判断,cookie之前记录的域名下是否存在cookie的信息。如果有,那么将cookie也发给服务端,服务器将会从cookie中获得sessionId.再根据sessionId查找session信息;如果没有的话,将会报错并返回给用户报错信息。
如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。
根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。

以上就是最简单的 cookie 和 session 的区别,这些只能够针对初级程序员的面试内容。

;