Cookie和Session详解

Cookie和Session都是用来跟踪浏览器用户身份的会话方式。

Cookie

简介

HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式web应用程序的实现。
举个例子:在网购场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料,最后结账时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户买了什么。为了解决这个问题,就需要使用Cookie服务器可以设置或读取Cookies中包含的信息,借此维护用户跟服务器会话中的状态

Cookie是指某些网站为了辨别用户身份、进行Session跟踪而储存在用户本地终端上的数据(通常经过加密)

Cookie是由服务端生成的,发送给客户端(通常是浏览器)的。Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie

  • 内存Cookie:由浏览器维护,保存在内存中,浏览器关闭后就消失,其存在事件是短暂的。
  • 硬盘Cookie:保存在硬盘中,有一个过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会被删除,其存在时间是长期的。

按存在时间,可分为非持久Cookie和持久Cookie。

工作原理

  1. 创建Cookie
    当用户第一次浏览某个使用Cookie的网站时,该网站的服务器就进行如下工作:
    (1)该用户生成一个唯一的识别码(Cookie id),创建一个Cookie对象
    (2)默认情况下它是一个会话级别的cookie,存储在浏览器内存中,用户退出浏览器之后被删除。如果网站希望浏览器将该Cookie存储在硬盘上,则需要设置最大失效(maxAge),并给出一个以秒为单位的时间(将最大失效设为0则是命令浏览器删除该cookie);
    (3)将cookie放入到HTTP响应报头,将Cookie插入到一个Set-Cookie HTTP请求报头中。
    (4)发送该HTTP响应报文。
  2. 设置存储Cookie
    浏览器收到该响应报文之后,根据报文里的Set-Cookie 特殊的指示,生成相应的Cookie,保存在客户端。该Cookie里面记录着用户当前的信息
  3. 发送Cookie
    服务器接收到用户的HTTP请求报文之后,从报头获取到该用户的Cookie,从里面找到所需要的东西。
    在这里插入图片描述

工作步骤

  1. 浏览器第一次发送请求到服务器端
  2. 服务器创建Cookie,该Cookie中包含用户信息,然后将该Cookie发送到浏览器端
  3. 浏览器端再次访问服务器端时会携带服务器端创建的cookie
  4. 服务器端通过Cookie携带的数据区分不同的用户

作用

Cookie的根本作用就是在客户端存储用户访问网站的一些信息。典型的应用有:

  1. 记住密码,下次自动登录。
  2. 购物车功能
  3. 记住用户浏览数据,进行商品(广告)推荐。

缺陷

  1. Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
  2. 由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题。(除非用HTTPS)
  3. Cookie的大小限制在4kb左右。对于复杂的存储需求来说是不够用的。

Session

简介

Seesion代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续。Session是服务器端的机制。Session对象用来存储特定用户会话所需的信息
Session由服务端生成,保存在服务器的内存、缓存、硬盘或数据库中。

工作原理

  1. 创建Session
    当用户访问到一个服务器,如果服务器启用Session,服务器就要为该用户创建一个session,在创建这个session的时候,服务器首先检查这个用户发来的请求里是否包含了一个Session Id,如果包含了则说明之前该用户已经登录过并为此用户创建过session,那服务器就按照这个 Session Id把这个session在服务器的内存中查找出来(如果找不到,就有可能为他新创建一个);如果客户端请求里不包含,则为该客户端创建一个session并生成一个与此session相关的Session Id这个Session Id是唯一的、不重复的、不容易找到规律的字符串,这个Session Id将会在本次响应中返回到客户端保存,而Session Id的正是Cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
  2. 使用session
    我们知道在IE中,我们可以在工具的Internet选项中把Cookie禁止,那么会不会出现把客户端的Cookie禁止了,那么SESSIONID就无法再用了呢?一些资料说明,可以有其他机制在COOKIE被禁止时仍然能够把Session id传递回服务器
    (1) 经常被使用的一种技术叫做URL重写,就是把Session id直接附加在URL路径的后面作为URL路径的附加信息。
    (2) 另一种是作为查询字符串附加在URL后面
    (3) 表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把Session id传递回服务器。
  3. 作用
    Session的根本作用就是在服务端存储用户和服务器会话的一些信息。典型的应用有:
    (1)判断用户是否登录
    (2)购物车功能
    在这里插入图片描述
    在这里插入图片描述

Cookie和Session的区别

  1. 存放位置不同
    Cookie保存在客户端,Session保存在服务器端。
  2. 存取方式不同
    Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微复杂的信息,运用Cookie是比较艰难的。
    Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类
  3. 安全性(隐私策略)不同
    Cookie存储在浏览器中,对客户端是可见的,客户端的一些程序可能会窥探、复制以至修正Cookie中的内容。
    Session存储在服务器上,对客户端是透明的,不存在敏感信息泄露的风险。
    假如选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。而假如选择Session就省事多了,反正是放在服务器上,Session里任何隐私都能够有效的保护。
  4. 有效期上的不同
    只需要设置Cookie的过期时间属性为一个很大很大的数字,Cookie就可以在浏览器保存很长时间。 由于Session依赖于名为JSESSIONID的Cookie,而Cookie JSESSIONID的过期时间默许为–1,只需关闭了浏览器(一次会话结束),该Session就会失效。
  5. 对服务器造成的压力不同
    Session是保管在服务器端的,每个用户都会产生一个Session。假如并发访问的用户十分多,会产生十分多的Session,耗费大量的内存。
    Cookie保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cookie是很好的选择。
  6. 跨域支持上的不同
    Cookie支持跨域名访问,例如将domain属性设置为“.baidu.com”,则以“.baidu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被普遍用在网络中。而Session则不会支持跨域名访问。Session仅在他所在的域名内有效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值