全国咨询热线:400-618-4000

JAVA培训之Cookie的过期时间设置

更新时间:2019年04月18日23时10分 来源:传智播客JAVA培训学院

1.Cookie生存时间介绍

我们知道Cookie是一个键值对,但是Cookie不仅仅只有name和value属性,它还有以下几种属性:
(1)注释:描述此 cookie 的用途;
(2)路径:指的是浏览器将此 cookie 返回到服务器上的路径,并且该cookie 对于服务器上的所有子路径都是可见的。
(3)域限定符:创建 cookie时设置的域名,域名形式是根据 RFC 2109 设置的;
(4)最大生存时间:表示cookie的存活时间,过了设置的最大生存时间,该cookie就会死亡;
(5)版本号:表示cookie遵守的协议版本,版本 1遵守RFC 2109,版本0遵守根据 Netscape 起草的原始 cookie 规范。
本文档只对Cookie的最大生存时间进行讲解,其他属性后面会一一说明。
Cookie的过期时间即为Cookie的最大生存时间,可以通过以下方法进行设置,如下所示:
  • void setMaxAge(int expiry)
该方法的参数的类型是整型,表示过期的时间,单位是秒。例如:cookie.setMaxAge(60)表示当前cookie会被浏览器保存在硬盘上,60秒后会被浏览器删除。
下面分情况说明cookie的setMaxAge()方法对cookie生存时间的设置,如下所示:
  • setMaxAge()参数大于0:表示将当前cookie保存在硬盘上,保存时间由其参数决定;
  • setMaxAge()参数小于0:无论该方法的参数是多少,只要小于0,则表示将当前cookie保存在浏览器内存中,浏览器关闭的同时cookie死亡;
  • setMaxAge()参数等于0:表示浏览器将当前cookie及之前保存的同名cookie删除,例如刚开始在浏览器端保存了一个cookie,名称为history,保存时间为2天,现在希望将该history删除,这个时候就可以向浏览器端再次发送一个名字为history的cookie,生存时间设置为0。这个时候浏览器会将名字为history的所有cookie删除。
如果,在服务器端新建一个cookie,并没有给该cookie设置生存时间,那么表示:该cookie会在浏览器关闭的时候被浏览器删除。

2.Cookie设置生存时间练习

通过以上对cookie生存时间的了解,下面通过一个案例来直观的体会cookie的生存时间设置对cookie的影响,具体如下:
(1)创建一个web项目,Example19,在该应用下的WebRoot目录下新建一个jsp文件,名称为cookieSet.jsp,主要代码如例1-1所示:
例1-1 cookieSet.jsp
  <body>
  <h1>保存cookie</h1>
    <%
      Cookie cookie1=new Cookie("cookie1","aaa");
      response.addCookie(cookie1);
     %>
  </body>
例1-1中,创建了一个cookie,但是并没有设置cookie的生存时间,通过以上对cookie生存时间的讲解,该cookie会在浏览器关闭的时候被销毁。
(2)将Example19发布到Tomcat服务器中,然后启动服务器,谷歌浏览器查看cookie比较方便,我们在谷歌浏览器端地址栏上访问:http://localhost:8080/Example19/cookieSet.jsp,浏览器显示结果如图1-1所示:

图1-1 浏览器显示结果
(3)查看谷歌浏览器中的cookie,点击图1-1所示的红色标注的图标,在下拉选项中选择【设置】,进入图1-2所示界面:

图1-2 查看cookie
(4)点击图1-2中的【内容设置】选项,进入图1-3所示界面:

图1-3 查看cookie
(5)点击图1-3中的【所有Cookie和网站数据…】按钮,进入图1-4所示界面:

图1-4 查看cookie
(6)点击图1-4所示的【cookie1】按钮,进入图1-5所示界面:

图1-5 cookie信息
由图1-5可知,名字为cookie1的cookie的过期时间为浏览会话结束时,即表示浏览器关闭,cookie被删除。
(7)关闭浏览器,再次打开浏览器,查看cookie1是否还存在,如图1-6所示:

图1-6 cookie信息
由图1-6所示,浏览器中已经不存在名为cookie1的cookie。
(8)对例1-1中的代码进行修改,如例1-2所示:
例1-2 cookieSet.jsp
  <body>
  <h1>保存cookie</h1>
    <%
      Cookie cookie1=new Cookie("cookie1","aaa");
      cookie1.setMaxAge(60*60)
      response.addCookie(cookie1);
     %>
  </body>
例1-2中,将cookie1的生存时间设置为1小时。
(9)在浏览器端再次访问cookieSet.jsp页面,查看浏览器中cookie1的保存时间,如图1-7所示:

图1-7 cookie信息
由图1-7可知,cookie1的保存时间是10:08:12,过期时间是:11:08:12,其生存时间正好是1个小时。
cookie1在浏览器端的存活时间是1小时,浏览器关闭后再打开,cookie1仍然存在,现在我们通过代码来将cookie1从浏览器端删除。
(10)在Example19应用的WebRoot目录下,新建一个jsp文件,名称为cookieGet.jsp,主要代码如例1-3所示:
例1-3 cookieGet.jsp
<body>
  <h1>删除cookie</h1>
    <%
      Cookie cookie=new Cookie("cookie1","aaa");
      cookie.setMaxAge(0);
      response.addCookie(cookie);
     %>
  </body>
例1-3中,再次新建一个名字为cookie1的cookie,并且设置其过期时间为0,表示浏览器立即删除当前及之前保存的名字为cookie1的cookie。
(11)重新启动服务器,在浏览器端地址栏上输入:http://localhost:8080/Example19/cookieGet.jsp,然后查看浏览器端的cookie1是否还存在,如图1-8所示:

图1-8 查看cookie
由图1-8可知,浏览器端的cookie1已经不存在了,它原本的生存时间是1小时,经过cookieGet.jsp页面中代码的设置,没有到过期时间就被浏览器删除了。

本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee