Cookie & Session区别

#1、Cookie

##1).会话状态管理?

对用户的会话状态进行增删改查,会话状态即数据

##2).为什么要有会话状态管理技术?

http协议本身是无状态的、无连接的,http协议本身不能保存用户的会话状态

##3). Cookie是将会话状态保存在浏览器的技术

##4). Cookie的原理:

1)服务器使用set-cookie的响应头将会话状态发送给浏览器进行保存
2)浏览器使用cookie的请求头将保存的会话状态发送给服务器进行使用

##5). Cookie的API

//1、
Cookie cookie=new Cookie(name, value);
response.addCookie(cookie);
//上下两种不同方式,来为浏览器设置cookie
response.addHeader("set-cookie", cookie.getName+"="+cookie.getValue());

//2、
cookie.getName();
cookie.getValue();

//3、
cookie.setMaxAge(int sec); //设置cookie的存活时间
//如果不设置,默认是会话级别,保存在浏览器的内存中,浏览器关闭,Cookie销毁
//设置后,保存在浏览器的临时文件夹中(硬盘上),浏览器多次关闭,Cookie不会销毁

//4、
cookie.setDomain();//不建议使用,浏览器厂商默认拒绝第三方Cookie,如果发现一个Cookie设置了domain,很可能直接拒收该cookie
cookie.setPath();
//浏览器如何决定一次请求是否发送一个Cookie?
//如果一次请求的url与一个Cookie的domain+path一致,或者是该Cookie的domain+path的子路径,则本次请求携带该cookie
//如果不设置,Cookie的path默认与发送它的Servlet的父路径一致
cookie.setPath(request.getContextPath());
request.getContextPath();//动态返回当前项目映射的路径。例:/Servlet01


//5、如何删除一个Cookie ?
//发送一个和要删除的Cookie同name,同path,同domain的Cookie,设置maxAge=0
//例:
Cookie cookie = new Cookie("username", "");
cookie.setMaxAge(0);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);

//6、Cookie中的中文问题
//Cookie中的数据使用ASCII字符集进行传输,不能有中文,如有,会直接抛出异常Control Character in Cookie value or attribute
URLEncoder.encode(value , "utf-8");
URLDecoder.decode(value, "utf-8")

##6)Cookie的细节

1) Cookie以浏览器为单位进行管理
2)一个浏览器可以保存约300个Cookie
3)为每个网站保存约20个Cookie
4)一个cookie的大小上限约4kb

——————————————————————————————————————————————————————————

#2、Session

session是将会话状态保存在服务器的技术

##1)Session的原理

1.服务器为每个用户创建一个session对象,保存该用户的会话状态
2.服务器将该Session的id,通过名为JSESSIONID的Cookie发送给浏览器保存(会设置Cookie的路径,request.getContextPath())
  • 所以当一个项目下的任何资源路径访问服务器时,都会携带JSEESIONID的Cookie
3.浏览器在后续的请求中,会自动携带JSESSIONID的Cookie,服务器通过该Cookie的值,找到用户对应的Session对象

##2)为什么用session?

1、相对Cookie来说更安全
2、Session仅需要传输JSESSIONID的Cookie,不占用服务器的网络带宽
3、Session中的数据没有大小限制 一个Cookie的大小上限约4kb

##3)怎么用?

//1、返回该用户对应的session对象
Httpsession session=request.getsession(boolean flag);
//flag:true:有则使用,无则创建
//flag:false:有则使用,无则返回null

//2、
session.setAttribute(String name, 0bject value);
Object value=session.getAttribute(String name);

4)Session发挥作用依赖于cookie

如果浏览器关闭,JSESSIONID的Cookie会被销毁,用户再次访问服务器时,服务器无法找到用户对应的Session对象

5)Session和Request的区别

request.setAttribute(String name, 0bject value);
session.setAttribute(String name, 0bject value)

1.可以利用Request在一次请求 的内部去共享数据,比如servlet共享数据给JSP
2.但是Session存活的时间比Request久很多,存入Session中的数据不能得到及时的释放,会增加服务器内存的负担
3.因此,仅需要在一次请求内部进行的数据共享,使用Request;需要跨请求(在多次请求之间)实现的数据共享,使用Session

6)session的销毁

1)超时

1.默认情况下,一个Session对象可以存活30分钟(从用户最后一次访问开始算)
2.可以手动指定session的存活时间,在web.xml文件中配置,单位是分钟

<session-config>
		<session-timeout>15</session-timeout>
</session-config>

3.超时时间越长,用户体验越好,服务器内存压力越大
4.超时时间越短,用户体验越差,服务器内存压力越小

2)马上销毁
//马上销毁该session
session.invalidate();  //常用于用户注销用例

7)Session的钝化和活化(了解)

1.当服务器正常关闭时,未超时的Session会被序列化到服务器的硬盘上保存,这个过程称为钝化
2.当服务器再次启动后,钝化的Session会被反序列化到内存中,继续发挥作用,这个过程称为活化

8)Cookie和session的区别?

  1. Cookie是将会话状态保存在浏览器的技术
    1. Cookie中保存的数据时间可以比较久(例如30天)
    1. Cookie中数据的安全性和稳定性较差
    1. Cookie中的数据大小有限制,约4kb
  1. session是将会话状态保存在服务器的技术
    1. Session中保存的数据时间比较短(默认30分钟超时)
    1. Session中的数据的安全性和稳定性较高
    1. Session中的数据大小理论上没有限制

9)Tomcat的三种数据共享

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值