Session和Cookie的区别

 黑马讲得比较详细  

一.什么是session 

==Session==:服务端会话跟踪技术:将数据保存到服务端。

除了使用Cookie一种方法,Web应用程序中还经常使用第二种方法Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

1、用户向服务器发送用户名和密码
2、服务器通过验证后,会在当前会话(session)里面保存相关数据,比如用户角色,登陆时间等;
3、服务器会通过Response Header的Set-Cookie向用户返回一个sessionId,客户端存入Cookie中
4、用户随后的每一次请求,都会通过Request Header的Cookie,将sessionId发送给服务器
5、服务器收到 sessionId 后,找到之前保存下来的数据,由此得知用户身份

注意点:

  1. 存储位置:服务器中(磁盘文件或数据库里面)
  2. 因为保存在服务端,所以相对于保存在客户端的cookie来说更加安全了

Session是存在于服务器端的。当浏览器第一次发送请求时,服务器自动生成一个Session和一个Session ID作为账号,并通过响应发送到服务器。浏览器第二次发送请求的时候,就可以直接找到相对应的Seesion(但是一旦服务器关闭过了,那么先前所有的Session都会被销毁)

二.session方法

session.setAttribute(String name, Object obj)    //将信息保存在session范围内
session.getAttribute(String name)        //获取保存在session范围内的信息
session.getAttributeNames();     //返回Session对象中存储的每一个属性对象,枚举型
session.isNew()            //判断session对象是不是新的
getCreationTime();        //返回Session被创建的时间.单位毫秒
invalidate();            //设置session无效,一般用在[安全退出]
removeAttribute("key");    //删除属性

黑马的笔记

Session的使用细节

Session钝化与活化

服务器重启后,Session中的数据是否还在?

 

(1)服务器端AServlet和BServlet共用的session对象应该是存储在服务器的内存中

(2)服务器重新启动后,内存中的数据应该是已经被释放,对象也应该都销毁了

所以session数据应该也已经不存在了。但是如果session不存在会引发什么问题呢?

举个例子说明下,

(1)用户把需要购买的商品添加到购物车,因为要实现同一个会话多次请求数据共享,所以假设把数据存入Session对象中

(2)用户正要付钱的时候接到一个电话,付钱的动作就搁浅了

(3)正在用户打电话的时候,购物网站因为某些原因需要重启

(4)重启后session数据被销毁,购物车中的商品信息也就会随之而消失

(5)用户想再次发起支付,就会出为问题

所以说对于session的数据,我们应该做到就算服务器重启了,也应该能把数据保存下来才对。

分析了这么多,那么Tomcat服务器在重启的时候,session数据到底会不会保存以及是如何保存的

只要服务器是正常关闭和启动,session中的数据是可以被保存下来的。

那如何才是正常关闭Tomcat服务器呢?

需要使用命令行的方式来启动和停止Tomcat服务器

==启动==:进入到项目pom.xml所在目录,执行 mvntomcat7:run

==停止==:在启动的命令行界面,输入ctrl+c

那么Tomcat服务器到底是如何做到的呢?

具体的原因就是:Session的钝化和活化:

钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中

活化:再次启动服务器后,从文件中加载数据到Session中

三.什么是Cookie

客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问。

2.Cookie的工作流程

生于服务器 存于客户端

第一种讲解 来源于存储方式详解(cookie、session、Token)_鹏鱼雁的博客-CSDN博客_cookie的存储形式

Cookie实际上是一小段的文本信息。(第一次)客户端请求服务器,如果服务器需要记录该用户状态,就使用Response Header(响应头)的Set-Cookie向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来(自动保存起来了,不用手动保存)。(第二次)当浏览器再请求该网站时,浏览器通过Request Header(请求头)的Cookie把请求的网址连同该Cookie一同提交给服务器(也是自动带上的cookie的)。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

第二种讲解来源于黑马笔记

  • 服务端提供了两个Servlet,分别是ServletA和ServletB

  • 浏览器发送HTTP请求1给服务端,服务端ServletA接收请求并进行业务处理

  • 服务端ServletA在处理的过程中可以创建一个Cookie对象并将name=zs的数据存入Cookie

  • 服务端ServletA在响应数据的时候,会把Cookie对象响应给浏览器

  • 浏览器接收到响应数据,会把Cookie对象中的数据存储在浏览器内存中,此时浏览器和服务端就==建立了一次会话==

  • ==在同一次会话==中浏览器再次发送HTTP请求2给服务端ServletB,浏览器会携带Cookie对象中的所有数据

  • ServletB接收到请求和数据后,就可以获取到存储在Cookie对象中的数据,这样同一个会话中的多次请求之间就实现了数据共享

Cookie的原理分析

对于Cookie的实现原理是基于HTTP协议的,其中设计到HTTP协议中的两个请求头信息:

  • 响应头:set-cookie

  • 请求头: cookie

 AServlet给前端发送Cookie,BServlet从request中获取Cookie的功能

  • 对于AServlet响应数据的时候,Tomcat服务器都是基于HTTP协议来响应数据

  • 当Tomcat发现后端要返回的是一个Cookie对象之后,Tomcat就会在响应头中添加一行数据==Set-Cookie:username=zs==

  • 浏览器获取到响应结果后,从响应头中就可以获取到Set-Cookie对应值username=zs,并将数据存储在浏览器的内存中

  • 浏览器再次发送请求给BServlet的时候,浏览器会自动在请求头中添加==Cookie: username=zs==发送给服务端BServlet

  • Request对象会把请求头中cookie对应的值封装成一个个Cookie对象,最终形成一个数组

  • BServlet通过Request对象获取到Cookie[]后,就可以从中获取自己需要的数据

Cookie的使用细节

第一个是Cookie的存活时间,第二个是Cookie如何存储中文,首先来学习下Cookie的存活时间。

Cookie的存活时间

默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁

所以我们现在就遇到一个难题是如何将Cookie持久化存储?

设置Cookie存活时间   setMaxAge(int seconds)

Cookie存储中文

如果需要存储中文,就需要进行转码,具体的实现思路为:

1.在AServlet中对中文进行URL编码,采用URLEncoder.encode(),将编码后的值存入Cookie中

2.在BServlet中获取Cookie中的值,获取的值为URL编码后的值

3.将获取的值在进行URL解码,采用URLDecoder.decode(),就可以获取到对应的中文值

   //对中文进行URL编码
        value = URLEncoder.encode(value, "UTF-8");
        System.out.println("存储数据:"+value);
Cookie是存在于客户端的。Cookie的数据不是发送到服务器,而是保存在浏览器当中,如果你没有设置存活时间,那么在你重启浏览器后,你的Cookie是不会保存的。相比于Session来说,Cookie不会占用电脑的运行内存,存储的数据大小也比Session要小,安全性也小于Session。但是一般的自动登录,就是由Cookie来实现完成的。

cookie和session区别

存储位置不同:cookie存储在客户端(cookie生于服务端  存于客户端),session存储在服务端
存储容量不同:cookie最多能保存4KB的数据,session来说没有上限,所以高并发时,session会很耗服务器资源
存储方式不同:cookie只能保存ASCLL字符串,session能够保存任何类型的数据
安全性:cookie对客户是可见的,可能会被伪造,session存储在客户端的,相对安全
有效期不同:cookie可以手动设置有效时间,session在关闭会话窗口之后就会丢失失效

黑马笔记

Cookie和Session小结

  • Cookie 和 Session 都是来完成一次会话内多次请求间==数据共享==的。

所需两个对象放在一块,就需要思考:

Cookie和Session的区别是什么?

Cookie和Session的应用场景分别是什么?

  • 区别:

    • 存储位置:Cookie 是将数据存储在客户端,Session 将数据存储在服务端

    • 安全性:Cookie不安全,Session安全

    • 数据大小:Cookie最大3KB,Session无大小限制

    • 存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟

    • 服务器性能:Cookie不占服务器资源,Session占用服务器资源

  • 应用场景:

    • 购物车:使用Cookie来存储

    • 以登录用户的名称展示:使用Session来存储

    • 记住我功能:使用Cookie来存储

    • 验证码:使用session来存储

  • 结论

    • Cookie是用来保证用户在未登录情况下的身份识别

    • Session是用来保存用户登录后的数据

介绍完Cookie和Session以后,具体用哪个还是需要根据具体的业务进行具体分析。


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值