面试常考--cookie和session的区别

浅谈Cookie*

一.什么是Cookie
HTTP协议本身是无状态的,即服务器无法判断用户身份。Cookie实际上是一小段文本信息(key-value格式)。客户端向服务端发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie,客户端浏览器会把Cookie保存起来,当浏览器再请求该网站时,浏览器把请求的网站连同该Cookie一起提交给服务器,服务器检查该Cookie,以此来辨认用户状态。
类似于,我们去银行办理储蓄业务,第一次给你办了张银行卡,里面存放了身份证、密码、手机等个人信息,当你下次再来的时候,银行机器能识别你的卡,从而能帮你办理业务。
二.Cookie机制(会话跟踪机制)

当用户第一次访问并登录一个网站时,Cookie的设置以及发送会经历以下4个步骤:客户端发送一个HttpRequest请求到服务器–服务器发送一个HttpResponse响应到客户端,其中包含了set-Cookie的头部–客户端保存Cookie之后向服务器发送请求时,HttpRequest请求包含一个Cookie的头部–服务器返回HttpResponse响应数据。
三.总结Cookie的特点
1、cookie是在服务端创建
2、cooki是保存在浏览器这一端
3、cookie的生命周期可以通过 cookie.setMaxAge(2000);
(如果不设置生命周期,cookie的生命周期当浏览器关闭时就消亡)
4、cooki可以被多个浏览器共享
5、一个web应用可以保存多个cookie。但保存在同一个cookie文本在客户端浏览器下。
6、cookie存放时候是以明文方式存放,因此安全性较低,可以通过加密后存放。
7、每次请求会携带与当前服务相关的键值对数据,cookie明文显示数据,用户可以知道cookie,数据存储在浏览器中容易被暴露,被获取,不存敏感数据

浅谈session

一.什么是session
Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。
一般情况下,服务器会在一定时间内(默认30分钟)保存这个 Session,过了时间限制,就会销毁这个Session。在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个 Session中。当然,也有使用数据库将这个Session序列化后保存起来的,这样的好处是没了时间的限制,坏处是随着时间的增加,这个数据 库会急速膨胀,特别是访问量增加的时候。一般还是采取前一种方式,以减轻服务器压力。
二.Session的客户端实现形式(即Session ID的保存方法)
一般浏览器提供了两种方式来保存,还有一种是程序员使用html隐藏域的方式自定义实现:
[1] 使用Cookie来保存,这是最常见的方法,本文“记住我的登录状态”功能的实现正式基于这种方式的。服务器通过设置Cookie的方式将Session ID发送到浏览器。如果我们不设置这个过期时间,那么这个Cookie将不存放在硬盘上,当浏览器关闭的时候,Cookie就消失了,这个Session ID就丢失了。如果我们设置这个时间为若干天之后,那么这个Cookie会保存在客户端硬盘中,即使浏览器关闭,这个值仍然存在,下次访问相应网站时,同 样会发送到服务器上。
[2] 使用URL附加信息的方式,也就是像我们经常看到JSP网站会有aaa.jsp?JSESSIONID=*一样的。这种方式和第一种方式里面不设置Cookie过期时间是一样的。
[3] 第三种方式是在页面表单里面增加隐藏域,这种方式实际上和第二种方式一样,只不过前者通过GET方式发送数据,后者使用POST方式发送数据。但是明显后者比较麻烦。
三.总结session的特点
1、session是存放在服务器的内存中。
2、一个用户的浏览器。,独享一个session域对象
3、session中属性默认的生命周期是30分,可以通过html文件来修改
4.服务器能够为不同的浏览器提供不同的session,
因为每个浏览器取访问web站点的时候,如果发出的http请求没有带JSESSIONID头就会自动给你创建一个并返回
5.session开启需要依赖数据库,因此需要确定是否存在与session相关的表

cookie与session的区别:

1.存储的位置不同:cookie数据保存在客户端,session数据保存在服务器端。session存储的数据比较安全。
服务器也可以通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。
可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。

2.存储的数据类型不同:两者都是key-value结构,但针对value的类型是有差异的。Cookie:value只能是字符串类型,session:value是object类型。

3.存储的数据大小限制不同:cookie大小受浏览器的限制,很多是4k的大小,session理论受内存的限制

4.生命周期的控制:cookie的生命周期当浏览器关闭的时候就消亡了
cookie的生命周期是累计的,从创建时就开始计时,30min后cookie生命周期结束
session的生命周期是间隔的,从创建时开始计时如在30min内没有访问session,那么session生命周期就被销毁

  • 12
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值