一、Cookie
![b378d9cd860bec667ae40a4d422673f2.png](https://img-blog.csdnimg.cn/img_convert/b378d9cd860bec667ae40a4d422673f2.png)
1、Cookie的本质与相关属性
Cookie是什么?
Cookie:服务器保存到浏览器的东西。它的形式是键值对(名+值为一个Cookie),所以它具有Name和Value属性。
![d3fbf53ec749aebda1f4597c19371509.png](https://img-blog.csdnimg.cn/img_convert/d3fbf53ec749aebda1f4597c19371509.png)
浏览器怎么判断哪个服务器/服务器上的jsp文件可以访问该Cookie呢?
Cookie具有Path属性,它是浏览器用来判断服务器能否访问该Cookie:若服务器的文件访问路径包含Cookie路径,那么可以访问该Cookie;否则不能访问。
例如:Cooke1的Path为:/Project,jsp1的路径(访问路径):/Project/a.jsp,jsp2的路径:/AProject/a.jsp。那么jsp1可以访问Cookie1,而jsp2不可以访问Cookie1
Cookie保存在浏览器的哪里,保存多长时间呢?
Cookie可以保存在内存或者硬盘中。若保存在内存中,浏览器关闭就清除Cookie;若保存在硬盘中,则会保存Cookie最大生命周期时间。
Cookie的MaxAge属性,是与Cookie生命周期相关的属性。如果MaxAge>0,那么Cookie会在硬盘中保存,保存其数值的时间(单位是秒);如果MaxAge=0,那么Cookie会被立刻删除;如果MaxAge<0,那么Cookie在内存中保存,关闭浏览器时清除Cookie。
Cookie相关内容补充
Cookie是由Http协议制定的(由浏览器创建对象)。
拥有9大内置对象(包括request、response)。
Cookie的实现(相关方法)
![a978a048595fbba29a49683abf1cbdce.png](https://img-blog.csdnimg.cn/img_convert/a978a048595fbba29a49683abf1cbdce.png)
Cookie[] request.getCookies(); // 返回所有Cookie对象(以Cookie数组形式)
void response.addCookie(String name,String value); // 向浏览器中存入给定名与值的Cookie
二、Session
![093dfafe7b8d00ae77e070dff05ae820.png](https://img-blog.csdnimg.cn/img_convert/093dfafe7b8d00ae77e070dff05ae820.png)
Session是什么?
Session:由服务器创建并保存在服务器端的,面向一次会话,以参数Attribute(名+值)形式保存数据的东西
- 服务器创建,保存在服务器端
- 调用getSession方法时,若Cookie有JSESSIONID,根据其找Session,若没有就重新创建Session并保存对应的JSESSIONID在Cookie上;若没有JSESSIONID,则新创建Session,同时保存JSESSIONID在Cookie上
- 以参数(名+值)形式保存数据
- 一次会话(时间)中,一个服务器的多个Servlet/Jsp对象共享
- 多个浏览器/客户端访问服务器时,每个会话都会创建新的Session
Session的实现
![09c518203e862eaa995c9992c5cfd7a6.png](https://img-blog.csdnimg.cn/img_convert/09c518203e862eaa995c9992c5cfd7a6.png)
/* Session的使用*/
配置Session最大不活动时间
//位置:web.xml文件
<session-config>
<session-timeout>数值(单位为min)<session-timeout/>
</session-config>
Session于依赖Cookie或者是URL重写,怎么理解?
>Session的创建需要SessionId,Cookie存储SessionId,所以有Cookie必定可以使用Session,即Session依赖于Cookie。
>通过URL重写,把SessionId放在访问服务器网页的URL中,也可以起到相同效果,所以Session也可以依赖于URL重写
//URL重写的实现
//位置: xxx.jsp
<a href="<%= response.encodeURL(/Project1/Aservlet) %>">点击这里<a/>