● 正数,表示在指定的秒数后过期
● 负数,表示浏览器关闭,Cookie 就会被删除(默认值是-1)
● 0,表示马上删除 Cookie
java
复制代码
publicclassCookieLiveextendsHttpServlet {protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { System.out.println("CookieLive 被调用...");//演示创建一个cookie , 生命周期为 60sCookiecookie=newCookie("job", "java");//解读:// 1. 从创建该cookie开始计时, 60秒后无效// 2. 浏览器来根据创建的时间,计时到60s秒,就认为该cookie无效// 3. 如果该cookie无效,那么浏览器在发出http请求时,就不在携带该cookie cookie.setMaxAge(60);//将cookie保存到浏览器 response.addCookie(cookie);//演示如何删除一个cookie, 比如删除username//1 先得到username cookie Cookie[] cookies = request.getCookies();CookieusernameCookie= CookieUtils.readCookieByName("username", cookies);if(usernameCookie != null) {//2. 将其生命周期设置为0 usernameCookie.setMaxAge(0);//3. 重新保存该cookie, 因为你将其生命周期设置0, 就等价于让浏览器删除该cookie//4. 说明:该cookie会被浏览器直接删除// 返回一个Set-Cookie: xxxxx => 一会抓包.// Set-Cookie: username=tom; Expires=Thu, 01-Jan-1970 00:00:10 GMT response.addCookie(usernameCookie);//返回一个Set-Cookie: xxxxx => 一会抓包. }else{ System.out.println("没有找到该cookie, 无法删除..."); }/*********************** * 默认的会话级别的 Cookie [即浏览器关闭就销毁了] * 前面我们讲课时,都是默认会话级别的生命周期 ***********************/Cookiecookie3=newCookie("dkey", "dkey_value");/** * 解读 setMaxAge源码 * public void setMaxAge(int expiry) { * this.maxAge = expiry; * } * private int maxAge = -1; 默认就是-1 *///cookie.setMaxAge(-1);//设置存活时间 response.addCookie(cookie3);// 给浏览器返回信息 response.setContentType("text/html;charset=utf-8");PrintWriterwriter= response.getWriter(); writer.println("设置cookie生命周期
"); writer.flush(); writer.close(); }protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { doPost(request, response); }}
cookie1.setPath = /工程路径
cookie2.setPath = /工程路径/aaa
请求地址: http://ip:端口/工程路径/资源
cookie1 会发给服务器
cookie2 不会发给服务器
请求地址: http://ip:端口/工程路径/aaa/资源
cookie1 会发给服务器
cookie2 会发给服务器
java
复制代码
import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;publicclassCookiePathServletextendsHttpServlet {protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { doGet(request, response); }protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {Cookiecookie=newCookie("keyPath1", "keyPath1Value");// request.getContextPath() + "/aaa" 得到 /工程路径/aaa cookie.setPath(request.getContextPath() + "/aaa");Cookiecookie2=newCookie("keyPath2", "keyPath2Value"); cookie2.setPath(request.getContextPath()); response.addCookie(cookie); response.addCookie(cookie2); response.setContentType("text/html;charset=utf-8"); response.getWriter().write("创建 Cookie keyPath1 路径 /工程路径/aaa
"); response.getWriter().write("创建 Cookie keyPath2 路径 /工程路径
"); }}
需求: 完成自动填写登录账户应用案例 , 如果用户登录成功,则下次登录自动填写登录 账户
html
复制代码
html>lang="en">charset="UTF-8">
java
复制代码
publicclassLoginServletextendsHttpServlet {protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//System.out.println("LoginServlet 被调用...~~~");//1. 接收表单提交用户名和密码Stringusername= request.getParameter("username");Stringpwd= request.getParameter("pwd"); response.setContentType("text/html;charset=utf-8");PrintWriterwriter= response.getWriter();//2. 判断是否合法if ("xxxx".equals(username) && "123456".equals(pwd)) {//将登录成功的用户名,以cookie的形式,保存到浏览器CookieloginuserCookie=newCookie("loginuser", username);//设置该cookie生命周期 loginuserCookie.setMaxAge(3600 * 24 * 3); response.addCookie(loginuserCookie);//合法 writer.println("登录OK
"); } else {//不合法 writer.println("登录失败
"); } writer.flush(); writer.close(); }protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { doPost(request, response); }}
说明 如果存放中文的 cookie, 默认报错, 可以通过 URL 编码和解码来解决, 不建议存 放中文的 cookie 信息
java
复制代码
publicclassEncoderCookieextendsHttpServlet {protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//System.out.println("EncoderCookie 被调用");//1. 创建cookie, 有中文//1) 如果直接存放中文的cookie, 报错 Control character in cookie value or attribute.//2) 解决方法,就是将中文 编程成 URL编码 英文: Encode=编码//3) 编码后,再保存即可Stringcompany= URLEncoder.encode("大家好", "utf-8");Cookiecookie=newCookie("company", company);//2. 保存到浏览器 response.addCookie(cookie);//3. 给浏览器返回信息 response.setContentType("text/html;charset=utf-8");PrintWriterwriter= response.getWriter(); writer.println("设置中文cookie成功
"); writer.flush(); writer.close(); }protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { doPost(request, response); }}
java
复制代码
publicclassReadCookie2extendsHttpServlet {protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { System.out.println("ReadCookie2 被调用..");//读取到中文cookie Cookie[] cookies = request.getCookies();CookiecompanyCookie= CookieUtils.readCookieByName("company",cookies);StringcompanyVal= companyCookie.getValue(); System.out.println("companyVal= " + companyVal);//URL//解码 companyVal = URLDecoder.decode(companyVal, "utf-8"); System.out.println("解码后 companyVal= " + companyVal);//中文//3. 给浏览器返回信息 response.setContentType("text/html;charset=utf-8");PrintWriterwriter= response.getWriter(); writer.println("读取中文cookie解码成功~
"); writer.flush(); writer.close(); }protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { doPost(request,response); }}
页面更新:2024-02-13
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号