【JavaEE】Cookie丶Session

1. Cookie

1.1 概述
  • 服务器将某些数据发送到浏览器,然后再把数据临时存到用户电脑上
  • Cookie主要用于存储用户信息、用户习惯、用户操作等数据
1.2 作用
  • 用户可以实现自动登录,可以记住登录的用户名和密码,方便下次简化登录
  • 电子商务网站(购物),可以记录你曾经选择的商品,在结账时可以将选择商品调出来,然后付账
  • 可以记录用户的访问习惯、网页停留的时间、喜欢什么样的商品、进行什么搜索,也是网络营销手段
1.3 工作原理
  • 服务器把某些数据存放到响应头中的Cookie中
  • 浏览器根据Cookie信息把数据临时存放到本地中
  • 客户端发送请求时浏览器会把本地有效的Cookie数据发送给服务器
  • 服务器获取Cookie信息
1.4 缺点
  • 因为cookie保存在浏览器上,所以安全性低
  • 可控性比较差,只能存放字符串,不能存放数组和对象
  • 因为数据存放在头信息中,所以增加请求数据的负载
  • 大多数的浏览器对cookie有4K的限制
  • Cookie可以被浏览器阻止
1.5 注意
  • 不同浏览器的Cookie是不相通的
1.6 添加Cookie
	//创建Cookie对象并设置存储的数据
	Cookie cookie=new Cookie("name","zhangsan");	
	
	//把cookie响应到浏览器中
	response.addCookie(cookie);
1.7 设置Cookie存储的有效时间
  • 默认Cookie是存储在浏览器内存中,浏览器关闭后该Cookie也会失效
  • 使用setMaxAge() 可以设置过期时间,单位:秒,Cookie会写入到客户端的文件中,Cookie过期跟浏览器是否关闭没有关系
	//设置过期时间是在当前时间的2分钟后
	cookie.setMaxAge(60*2);
1.8 设置目录有效性
  • setPath() 设置只有访问指定目录下的文件,请求时才会携带该Cookie、
  • 默认设置的目录是跟添加Cookie的文件同一个目录
	//1.默认设置的是跟当前文件同一个目录,假如url地址是http://localhost:6060/Web04/Servlet/CookieServlet,那么等同cookie.setPath("/Web04/Servlet");
	
	//2.网站Web04所有资源都能访问该Cookie,如果默认的首页index.html和当前的CookieServlet
	cookie.setPath("/Web04");
	
	//3.服务器上所有的网站所有的文件都能访问
	cookie.setPath("/");
1.9 移除Cookie
  • 同名用域名同目录有效性时间为0的Cookie进行覆盖就达到删除Cookie效果
	//同名同目录有效性时间为0的Cookie进行覆盖就达到删除Cookie效果
	//1.同名,值没限制
	Cookie cookie=new Cookie("name",null);
	//2.有效时间为0
	cookie.setMaxAge(0);
	//3.跟原Cookie设置的目录要一致
	cookie.setPath("/");

	 //4.把cookie响应到浏览器中进行覆盖
	 response.addCookie(cookie);
1.10 获取Cookie
	//需要查找Cookie的键名
	String key="name";				
	String value = "";
	
	//获取请求发送过来的所有Cookie
	Cookie[] cookies = request.getCookies();
	//遍历Cookie
	for (Cookie cookie : cookies) {
		//根据Cookie的键名对比查找相应的Cookie
		if (cookie.getName().equals(key)) {
			//获取当前Cookie的值
			value = cookie.getValue();
			break;
		}
	}
	System.out.println(value);

2. Session

2.1 概述
  • Session是一种会话技术;
  • Session数据存在服务器端,相对于比较安全;
  • Session是基于COOKIE的,如果COOKIE被禁用SESSION功能也会被影响
  • Session可以存储多个类型的数据;
  • Session文件没有大小限制;
  • sessionid默认是整个网站都能访问(即使没有设置cookie.setPath()),所以session存储的数据跨request都有效
2.2 工作原理
  • 把数据存放在服务器中,并把一个sessionid放到响应头Cookie中
  • 浏览器把sessionid保存到本地中
  • 客户端发送请求时浏览器会把本地有效的cookie中的sessionid发送给服务器
  • 服务器根据sessionid查找存储的数据
2.3 注意
  • sessionid没有发送到服务器端或者服务器端存储的session被销毁都会导致session数据丢失,调用request.getSession()会重新创建一个session
2.4 获取session和sessionid
	//获取Session
	//该方法会根据客户端传递过来的JSESSIONID在服务器的Session文件中查找是否存在对应的数据
	//如果存在,则返回该Session,如果不存在则创建一个新的Session
	HttpSession session=request.getSession();
	
	//获取JSESSIONID的值
	//1.使用request对象获取,如果第一次访问没有携带sessionid会返回null
	String sessionId1=request.getRequestedSessionId();
	//2.使用session对象获取		
	String sessionId2=session.getId();
	//3.使用cookie键为JSESSIONID查找其值
2.5 域对象
  • session域存储的数据在session失效前可以被整个网站应用任何动态资源访问(跨请求丶跨资源)
//存储数据到session域中
session.setAttribute("name", "zhangsan");

//获取session存储数据强转前要判断数据是否为null,因为session可能会过期
Object obj=session.getAttribute("name");
String name=obj==null?null:(String)obj;

//移除session中的数据
session.removeAttribute("name");
2.6 sessionid存储在客户端的有效时间
  • sessionid是存储在Cookie中的,所以也是默认关闭浏览器sessionid的Cookie会失效
  • 通过设置JSESSIONID的Cookie的有效时间来把JSESSIONID存在到客户端的本地文件中
	HttpSession session=request.getSession();	
	//同名同值的sessionid的cookie
	Cookie cookie=new Cookie("JSESSIONID",session.getId());
	//设置sessionid的cookie有效存储6小时
	cookie.setMaxAge(60*60*6);
	
	//响应到客户端覆盖掉原先的sessionid的cookie
	response.addCookie(cookie);
2.7 服务器端session定时销毁
  • 默认连续30分钟该客户端没有发送请求到服务器端(不要求一定要调用session),则该session就会自动被销毁
  • 可以在web.xml设置销毁session的连续空闲时间间隔
<web-app>
  <session-config>
	 <!-- 设置销毁session的连续空闲时间间隔,单位是分钟 -->
    <session-timeout>10</session-timeout>
  </session-config>
 </web-app>
2.8 手动销毁存储在服务器端的session
//销毁session
session.invalidate();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值