Cookie
1. 会话:一次会话中包含多次请求和响应。
一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
2. 功能:在一次会话的范围内的多次请求间,共享数据
3. 方式:
1. 客户端会话技术:Cookie
2. 服务器端会话技术:Session
-----------------------------------------------------------------------------------
1) 创建Cookie对象,绑定数据
new Cookie(String name, String value)
2)发送Cookie对象
response.addCookie(Cookie cookie)
3)获取Cookie,拿到数据
Cookie[] request.getCookies()
基于响应头set-cookie和请求头cookie实现
共享数据
第一次浏览器向服务器请求cookie资源,服务器便响应发送响应头set-cookie:键值对,浏览器获取数据保存在本地,第二次浏览器向服务器发送请求头cookie:键值对,服务器获取cookie数据
@WebServlet("/CookieDemo1")
public class CookieDemo1 extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建Cookie对象
Cookie c = new Cookie("msg","hello");
//2.发送Cookie
response.addCookie(c);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
@WebServlet("/CookieDemo2")
public class CookieDemo2 extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//3. 获取Cookie
Cookie[] cs = request.getCookies();
//获取数据,遍历Cookies
if(cs != null){
for (Cookie c : cs) {
String name = c.getName();
String value = c.getValue();
System.out.println(name+":"+value); //msg:hello
}
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。
1. 默认情况下,当浏览器关闭后,Cookie数据被销毁
2. 持久化存储:etMaxAge(int seconds)
【1】 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
【2】负数:默认值
【3】 零:删除cookie信息
@WebServlet("/cookieDemo4")
public class CookieDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建Cookie对象
Cookie c1 = new Cookie("msg","setMaxAge");
//2.设置cookie的存活时间
//c1.setMaxAge(30);//将cookie持久化到硬盘,30秒后会自动删除cookie文件
//c1.setMaxAge(-1);
c1.setMaxAge(0);//删除Cookie
//3.发送Cookie
response.addCookie(c1);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
【1】在tomcat 8 之前 cookie中不能直接存储中文数据。
【2】需要将中文数据转码---一般采用URL编码(