servlet中cookie和session源码浅析
文章目录
一、简介
http协议是无状态的,在web会话中,为了记录会话状态信息,将使用cookie和session,这里基于源码进行介绍。
二、cookie
cookie是servlet发给客户端浏览器的小量信息,并由浏览器保存,后续浏览器请求将会带上前面保存的信息。cookie通常用于标识用户身份。一个cookie有名称、值和其它可选属性(如备注、路径、域名标识、最大存活时间、版本号等)。
2.1 cookie特点
1、浏览器通常对每个web服务支持20个cookie,并且浏览器总共支持300个cookie(换句话说,极端情况,浏览器最多支持15个web服务的cookie);
2、一个cookie通常限制4KB;
3、使用HttpServletResponse.addCookie方法添加cookie;
4、使用HttpServletRequest.getCookies方法获取cookie;
5、不同路径下cookie可以有相同名称;
6、cookie返回浏览器时保存在响应header中。
2.2 cookie源码
Cookie源码如下:
package javax.servlet.http;
import java.io.Serializable;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
public class Cookie implements Cloneable, Serializable {
//cookie名称,其中$Name形式为保留字
private String name;
//cookie值
private String value;
//cookie备注
private String comment;
//域名,指定在哪个域名有效
private String domain;
//生存时间,单位为秒,0表示立即删除,大于0表示cookie保存指定时间,小于0表示仅在当前浏览器窗口有效,
//不设置表示同浏览器进程一样的存活时间
private int maxAge = -1;
//路径,表示cookie对指定路径及子路径有效,不设置表示浏览器访问所路径都带上cookie,同时服务器任何路径回传都不带cookie信息
private String path;
//是否使用SSL,是则只有在安全方式访问发送cookie,否则可以以非安全方式访问发送
private boolean secure;
//版本,等于1表示RFC2109++类型
private int version = 0;
//是否http只读,即只能http或https访问传输,如javascript等不能访问
private boolean isHttpOnly = false;
//cookie构造器,填充名称和值,其中名称不能是保留字,忽略大小写,
//保留字有Comment、Discard、Domain、Expires、Max-Age、Path、Secure、Version、以$开头
public Cookie(String name, String value) {
}
//各属性值的get和set方法,略过
...
}
2.3 cookie示例
cookie读取与添加示例如下:
package session;
import com.alibaba.fastjson