java可以通过cookie对象的setMaxAge方法来设置cookie的生命周期
setMaxAge() 的参数单位是秒,默认值为-1
//这是cookie源代码
private int maxAge = -1; // ;Max-Age=VALUE ... cookies auto-expire
有三种情况:
1.参数为负数:表示浏览器关闭后则删除cookie,这种方式cookie存在于浏览器的内存中,
注意是关闭浏览器才会删除,而不是关闭当前页面。
代码演示:
public class CookieTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//添加cookie
Cookie cookie = new Cookie("key", "value");
//这里没有设置过期时间,默认为-1
resp.addCookie(cookie);
}
}
xml中设置的访问路径为:
<servlet>
<servlet-name>TestCookie</servlet-name>
<servlet-class>servlet.CookieTest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestCookie</servlet-name>
<url-pattern>/testCookie</url-pattern>
</servlet-mapping>
现在打开浏览器访问该路径:localhost:8080/test/testCookie
ps: 工程路径为:/test
可以看到浏览器已经存储了我们的设置的cookie对象
操作一:如果这个时候打开一个新的标签页访问百度 并查看页面的cookie发现无法找到我们设置的cookie。
操作二:如果这个时候关闭访问localhost:8080/test/testCookie的标签页,然后重新打开一个标签页访问该路径,会发现能够找到我们设置的cookie。
操作三:关闭浏览器,重新打开访问localhost:8080/test路径,发现cookie找不到了。
总结:
1.关闭一个页面后并不会删除会话cookie,关闭浏览器才会删除内存中的会话cookie
2.在某个页面打开控制台看到的cookie只是和该页面有关的cookie,并不会展示内存中的所有cookie.
3.参数为正数:
到指定时间才会删除cookie,即使关闭了浏览器,也会被持久化到硬盘上,下次访问相关页面,任然会加载到内存中。
将上面代码修改一下,设置过期时间为1分钟。
访问 localhost:8080/test/testCookie
可以看到这时的cookie不是会话cookie,而是有一个明确的过期时间。
在一分钟之内完成重启浏览器访问该路径的操作,会发现还是能找到设置的cookie
一分钟过后,则会删除该cookie
2.参数为0:
表示立刻删除该cookie