Cookie&Session总结

Cookie概述

Cookie是服务器传存储在客户端上的一份小数据.
当客户端访问服务器时,请求头中Cookie字段会包含键=值形式的Cookie信息.
当服务器回应客户端时,应答头中Set-Cookie字段会包含键=值形式的Cookie信息.
在这里插入图片描述

Cookie应用场景

自动登录,浏览记录,购物车等.

为什么需要Cookie

Http协议是无状态协议.

Cookie的简单使用

存取Cookie

// 添加cookie
Cookie cookie = new Cookie("address", "Beijing");
response.addCookie(cookie);

// 获取客户端带过来的cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
	String cookieName = cookie.getName();
	String cookieValue = cookie.getValue();
	System.out.println(cookieName + " = "+ cookieValue);
}

Cookie的常用方法

  1. setMaxAge(int expiry): 默认情况下,Cookie保存到关闭浏览器为止,可以设置Cookie的最大生存时间
    参数expiry指定Cookie的最大生存时间,以秒计算
    正值表示在这个数字过后,cookie将会失效.
    负值表示关闭浏览器后cookie立即失效,默认值是 -1.
    // 将Cookie数据保存7天
    cookie.setMaxAge(60 * 60 * 24 * 7);
    
  2. cookie.setDomain(String 域名),cookie.setDomain(String 路径); 指定只有请求了指定的域名和路径,才会带上该cookie
    //只有访问 .maoritian.cn 域名下的 /MyProject 路径地址才会携带该cookie
    cookie.setDomain(".maoritian.cn");
    cookie.setPath("/MyProject");
    

Session

Session概述

Session是基于Cookie的一种会话机制.Session的数据存放在服务器端.

Sessoin常用API

// 得到Session对象
HttpSession session = request.getSession();
// 得到会话ID
String id = session.getId();
// 存值
session.setAttribute("name", "value");
// 取值
session.getAttribute("name");
// 删除值
session.removeAttribute("name");

Session的生命周期

  1. Session的创建: 如果有在servlet里面调用了request.getSession(),就创建了一个Session.
  2. Session的销毁: Session是存放在服务器内存中的数据,可以持久化.关闭浏览器并不会销毁Session. 若超过会话有效期,则Session自动销毁,默认有效期30分钟.

Session实例: 购物车

response.setContentType("text/html;charset=utf-8");

// 获取要添加到购物车的商品id,继而获得商品名称
int id = Integer.parseInt(request.getParameter("id"));
String[] names = { "Iphone7", "小米6", "三星Note8", "魅族7", "华为9" };
String name = names[id];

// 获取存放购物车数据的session,其存储的数据类型是 Map<String ,Integer>
Map<String, Integer> map = (Map<String, Integer>)request.getSession().getAttribute("cart");
// 若购物车没有初始化,则先初始化购物车
if (map == null) {
	map = new LinkedHashMap<String, Integer>();
	request.getSession().setAttribute("cart", map);
}

// 向购物车加入商品
if (map.containsKey(name)) {
	map.put(name, map.get(name) + 1);
} else {
	map.put(name, 1);
}

// 跳转
response.getWriter().write("<a href='product_list.jsp'><h3>继续购物</h3></a><br>");
response.getWriter().write("<a href='cart.jsp'><h3>去购物车结算</h3></a>");

猜你喜欢

转载自blog.csdn.net/ncepu_Chen/article/details/88184472