package study.web.cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet("/cookie/demo01")
public class demo01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
/**
* 客户端会话技术:Cookie
* 实现原理:
* 基于响应头set-cookie和请求头cookie实现
* Cookie的特点和作用:
* cookie存储数据在客户端浏览器
* 浏览器对于单个 cookie 的大小有限制在 4kb 以内, 对同一个域名下的总cookie数量也有限制(20个)
* Cookie默认关闭客户端后失效
* @param request
* @param response
*/
public static void CookieDemo(HttpServletRequest request, HttpServletResponse response) {
//创建Cookie对象
Cookie c = new Cookie("msg", "hello Cookie");
//设置Cookie作用域范围(将作用域设置为根路径,同一个服务器的多个项目可以共享cookie)
//该设置项默认为当前项目的作用域
c.setPath("/");
//设置Cookie过期时间
//设置正数 表示x秒后过期
//设置0,表示立即过期
c.setMaxAge(300);
//设置cookie的域名作用域(将作用域设置为域名,多个子域名可以共享cookie)
//c.setDomain();
//发送Cookie
response.addCookie(c);
//获取Cookie
Cookie[] cook = request.getCookies();
//获取数据,遍历Cookies
if(cook != null){
for (Cookie cs : cook) {
String name = cs.getName();
String value = cs.getValue();
System.out.println(name+":"+value);
}
}
}
/**
* 服务器端会话技术:Session
* 实现原理:
* Session的实现是依赖于Cookie的。
* 问题:
* 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
* 默认情况下。不是。
* 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
*
* 当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
* 默认情况下。不是。
* 如果需要相同,可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存
*
* Session什么时候失效:
* 服务器关闭
* 调用session.invalidate()方法
* 默认30分钟失效
* @param request
* @param response
*/
public static void SessionDemo(HttpServletRequest request, HttpServletResponse response) {
//使用Session共享数据
//获取session
HttpSession session = request.getSession();
//存储数据
session.setAttribute("msg","hello Session");
//获取数据
session.getAttribute("msg");
//删除数据
session.removeAttribute("msg");
//期望客户端关闭后 session也能相同(持久化)
Cookie c = new Cookie("JSESSINOID", session.getId());
c.setMaxAge(60 * 60);//一小时
//发送cookie
response.addCookie(c);
}
}
555