1.服务器写cookie的原理:使用响应头set-Cookie将cookie信息发送到浏览器
2.服务端读cookie的原理:
a.浏览器在访问服务器的时候,会遍历保存的所有cookie,cookie的path属性符合的,自动发送给服务器
b.浏览器使用请求头Cookie将cookie信息发送
3.cookie存活时间的问题
a.cookie默认的存活时间,浏览器关闭,cookie消失,这个时候,cookie并没有在硬盘上保存,只是保存在浏览器内存中
b.如何让cookie长久保存: 手动设置cookie的存活时间: setMaxAge() 单位是秒
c.setMaxAge()可以使用的值:
1)默认值:-1,将cookie保存在浏览器内存中
2)正整数:单位是秒,cookie存活时间手动设置
3)0:实现删除效果
4.cookie路径的问题:
a.写cookie的时候有一个默认的路径,读cookie的时候,浏览器如果访问的资源和写的cookie的路径一致,将会自动把cookie使用请求发送到服务端
b.写cookie的时候,可以使用setPath()重新指定路径
c.写cookie的时候,path:
/Suke/:只有浏览器访问的资源是/Suke/直接子资源才能携带
/Suke/app/:只有浏览器访问的资源是/Suke/直接子资源和/Suke/app/资源才能携带
5.cookie缺点:不同的浏览器保存的cookie不同,因为各家浏览器保存的路径不同。
a.cookie不能保存中文
b.每个浏览器最多保存300多个cookie(现在变了,各家不一样了!)
c.每个站点最多分配20个cookie
d.每个cookie最大保存4k内容
代码实现 :
@WebServlet(name = "cookie1", urlPatterns = "/cookie1")
public class Cookie1Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.cookie虽然是将数据保存在客户端,但是需要从服务端写数据到客户端
// 创建cookie对象(cookie是一个map类型的数据结构)
// 只能保存字符串数据,无法直接保存对象(可以将对象转换为json数据(字符串类似的数据结构),保存)
Cookie cookie = new Cookie("user", "admin");
//2.设置cookie的一些属性(这个步骤可以省略,前提是不需要设置)
cookie.setMaxAge(10); //设置cookie的存活时间
// cookie.setPath(); //设置cookie的路径
//3.将cookie写入到客户端(浏览器)
resp.addCookie(cookie);
}
}
@WebServlet(name = "cookie2", urlPatterns = "/cookie2")
public class Cookie2Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//4.读取cookie
Cookie[] cookies = req.getCookies();
//5.迭代所有的cookie对象
if (cookies == null) {
System.out.println("没有cookie");
} else {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("user")) {
String value = cookie.getValue();
System.out.println("user = " + value);
}
}
}
}
}
@WebServlet(name = "cookie3", urlPatterns = "/cookie3")
public class Cookie3Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//实现删除cookie
//1.创建cookie对象(需要跟删除的cookie的名字相同)
Cookie cookie = new Cookie("user", "admin");
//2.设置cookie的一些属性(这个步骤可以省略,前提是不需要设置)
cookie.setMaxAge(0); //设置cookie的存活时间
// cookie.setPath(); //设置cookie的路径
//3.将cookie写入到客户端(浏览器)
resp.addCookie(cookie);
}
}
@WebServlet(name = "cookie4", urlPatterns = "/cookie4")
public class Cookie4Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//实现删除cookie
//1.创建cookie对象(需要跟删除的cookie的名字相同)
Cookie cookie = new Cookie("password", "123456");
//2.设置cookie的一些属性(这个步骤可以省略,前提是不需要设置)
//cookie.setMaxAge(0); //设置cookie的存活时间
//cookie.setPath(); //设置cookie的路径
//3.将cookie写入到客户端(浏览器)
resp.addCookie(cookie);
}
}
@WebServlet(name = "cookie5", urlPatterns = "/app/cookie5")
public class Cookie5Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//实现删除cookie
//1.创建cookie对象(需要跟删除的cookie的名字相同)
Cookie cookie = new Cookie("age", "23");
//2.设置cookie的一些属性(这个步骤可以省略,前提是不需要设置)
//cookie.setMaxAge(0); //设置cookie的存活时间
//cookie.setPath(); //设置cookie的路径
//3.将cookie写入到客户端(浏览器)
resp.addCookie(cookie);
}
}
@WebServlet(name = "cookie6", urlPatterns = "/app/cookie6")
public class Cookie6Servlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//4.读取cookie
Cookie[] cookies = req.getCookies();
//5.迭代所有的cookie对象
if (cookies == null) {
System.out.println("没有cookie");
} else {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("user")) {
String value = cookie.getValue();
System.out.println("user = " + value);
}
}
}
}
}