会话技术-cookie的API(十六)

来源:互联网 发布:淘宝卖家怎么删除订单 编辑:程序博客网 时间:2024/06/14 18:19

客户端收到cookie之后,下次访问服务器会默认带上cookie。但是,如果客户端重启之后,再次访问服务器,cookie就没有了。

这是因为cookie默认级别是会话级别。如果想让cookie变得更久该怎么办呢?

一、设置Cookie在客户端的持久化时间

cookie.setMaxAge(int seconds); ---时间秒

注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会被持久化到浏览器的磁盘文件里。不同的浏览器的cookie持久化的地方是不一样的。

示例:

cookie.setMaxAge(10*60);

设置cookie信息在浏览器的磁盘文件中存储的时间是10分钟,过期浏览器自动删除该cookie信息

实例:

package com.ken.cookie;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class SendCookieServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 1.创建cookie对象Cookie cookie = new Cookie("name", "zhangsan");// 1.1 为cookie设置持久化时间--------cookie信息在硬盘上保存的时间cookie.setMaxAge(50);// 50秒// 2.将cookie中存储的信息发送到客户端----头response.addCookie(cookie);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
首先,我们访问sendCookie这个servlet



我们先关闭浏览器,然后访问静态资源:

cookie的name和value都存在。

过了50秒后,我们访问静态资源:



cookie的name和value不见了

二、设置Cookie的携带路径

cookie.setPath(String path);

注意:如果不设置携带路径,那么该cookie信息会在访问产生该cookie的web资源所在的路径都携带cookie信息

示例:

cookie.setPath("/WEB16");

代表访问WEB16应用中的任何资源都携带cookie

cookie.setPath("/WEB16/cookieServlet");

代表访问WEB16中的cookieServlet时才携带cookie信息

实例:

package com.ken.cookie;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class SendCookieServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 1.创建cookie对象Cookie cookie = new Cookie("name", "zhangsan");// 1.1 为cookie设置持久化时间--------cookie信息在硬盘上保存的时间cookie.setMaxAge(50);// 50秒// 1.2为cookie设置携带的路径cookie.setPath("/cookieDemo/sendCookie");// 访问sendCookie资源时才携带这个cookie// 2.将cookie中存储的信息发送到客户端----头response.addCookie(cookie);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

先访问sendCookie



再访问静态资源:



再访问sendCookie:


package com.ken.cookie;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class SendCookieServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 1.创建cookie对象Cookie cookie = new Cookie("name", "zhangsan");// 1.1 为cookie设置持久化时间--------cookie信息在硬盘上保存的时间cookie.setMaxAge(50);// 50秒// 1.2为cookie设置携带的路径cookie.setPath("/cookieDemo/sendCookie");// 访问sendCookie资源时才携带这个cookie// cookie.setPath("/cookieDemo");// 访问cookieDemo下的任何资源都才携带这个cookie// cookie.setPath("/");// 访问服务器下的任何资源都才携带这个cookie// 2.将cookie中存储的信息发送到客户端----头response.addCookie(cookie);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

三、删除客户端的cookie:

如果想删除客户端的已经存储的cookie信息,那么就使用同名同路径的持久化时间为0的cookie进行覆盖即可


原创粉丝点击