在实际的开发工作中,需要在多次请求中携带一些带有生命期的数据信息,以及需要和前端协作存储少量含有过期值的必须数据。那么就需要使用到cookie了,有了cookie大家可能会想到,session也可以完成会话时数据的存储呀。他们确实都可以,只是用法,范围以及场景都略有却别!
cookie的过期时间如何设置的呢,很简单掉用setMaxAge(seconds)
即可,再通过httpServletResponse.addCookie(cookie)
完成cookie的种植即可。虽然只是简单的两步,如果没了解过期值设置的原理,依然后存在问题。cookie在过期时间(自己认为的)内失效,cookie设置的过期值无效,导致获取时不存在
。
接下来,通过源码分析如何设置的cookie过期值,又如何在response的headers中设置Set-cookie
头。
httpServletResponse作为父接口,所以我们需要看它的子类(子类有很多)
org.apache.catalina.connector.Response#addCookie(cookie)方法:
public void addCookie(final Cookie cookie) {
// Ignore any call from an included servlet
if (included || isCommitted()) {
return;
}
cookies.add(cookie);
String header = generateCookieString(cookie);
//if we reached here, no exception, cookie is valid