Cookie与Session详解

会话技术:

会话技术指的是:在一次会话的范围内的多次请求间,共享数据
一次会话指的是,浏览器第一次给服务器资源发送请求开始,会话建立,直到有一方断开为止

会话技术分为客户端会话技术(Cookie)和服务器端会话技术(Session)


Cookie:

Cookie是客户端会话技术,将数据保存到客户端

执行流程图解:

在这里插入图片描述
1.客户端浏览器访问你的网页,点击了某个按钮,向服务器发送了一份请求
2.服务器会根据需求创建一个Cookie之后响应发送给浏览器,相当于一个身份验证。
3.当浏览器再次访问该服务器下某个资源时,请求会自动携带这个Cookie到服务器,服务器会解析Cookie,就会知道是谁访问,而根据对象响应回对应数据。

Cookie的实现原理:

是基于响应头set-cookie和请求头cookie实现。

Cookie的特点:

1.cookie存储数据在客户端浏览器
2.浏览器对于单个cookie的大小有限制(4kb),以及对同一个域名下的总cookie数量也有限制(20个)

Cookie的作用:

1.cookie一般用于存储少量的不太敏感的数据
因为如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过 去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。一般存储一些不太敏感的数据
2.在不登录的情况下,完成服务器对客户端的身份识别

Cookie的细节:

1.Cookie是否可以一次发送多个?
可以,可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可

2.在浏览器存储时间?
默认情况下,当浏览器关闭后,Cookie数据被销毁。
想要持久化存储,可以通过setMaxAge(int seconds)设置。
当参数为正数时,将Cookie数据写到硬盘的文件中,cookie存活时间为设置的参数的秒数
当参数为负数时,为默认值,当浏览器关闭后,Cookie数据被销毁。
当参数为零时,为删除对应cookie信息

3.Cookie中是否可以存储中文?
在tomcat8之前cookie不能存储中文数据,需要将中文数据转码(一般采用url编码)
在tomcat8之后可以存储,但是特殊字符还是不允许(建议使用url编码进行存储)

4.Cookie的获取范围有多大?
同一个tomcat服务器中,默认情况下,同一个tomcat服务器中,虚拟目录不同不能共享,如果要在本服务器下都共享可以将虚拟目录设置为"/"。
不同的tomcat服务器间cookie共享,需要使用setDomain(String path)并且如果设置一级域名相同,那么多个服务器之间才可以共享cookie


Session:

Session是服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的HTTPSession对象中。

执行流程图解:

在这里插入图片描述
1.当用户登录后,因为数据隐私,不能直接使用相对不安全的Cookie直接存储,这时,服务器会使用Session,将数据存储到服务器上
2.当服务器响应的时候就会返回一个随机的id值,给Cookie,键名为JSESSIONID,值为session.getid。
3.当用户再次访问时,服务器会解析这个id,调出用户信息。

Session的实现原理:

Session的实现是依赖于Cookie的
在上面执行流程的第二步,为啥需要使用Cookie去传递一个id,是因为确保用户是同一个人,Session并不会直接传递给浏览器,而Demo01和Demo02想要共享数据(从服务器中提取到数据),那么就都需要创建一个Session对象,如何确保这两个模块的Session对象一致,就是这个Cookie传递的id值。所以说Session的实现依赖于Cookie。而id值每次登录都是随机的,而默认情况下,浏览器一关闭Cookie就被清除了,所以相对Cookie来说,Session较安全。

Session的特点:

1.session用于存储一次会话的多次请求的数据,存在服务器端
2.session可以存储任意类型和大小的数据

Session的细节:

1.当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
默认情况下,不是同一个
如果需要相同,则可以创建cookie,键为JSESSIONID,值为session.getid,设置最大存活时间,让cookie持久化存储

2.客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
不是同一个,但是要确保数据不丢失,因此有两个tomcat自动化的过程:
session的钝化:在服务器正常关闭之前,将session对象系列化到硬盘上
session的活化:在服务器启动后,将session文件转化为内存中的session对象即可

3.session的失效时间
1.服务器关闭时,自动失效
2.session对象调用invalidate()后失效
3.session默认失效时间为30分钟


面试题:Cookie和Session的区别:

1.两者的存储位置不同,session存储数据在服务器端,cookie在客户端

2.两者的大小限制不同,session没有数据大小限制,cookie为4kb

3.两者的安全系数不同,seeing数据安全,cookie相对不安全

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值