Java Cookie常用方法介绍
什么是Cookie?
Cookie翻译成中文是小甜点,小饼干的意思。
Cookie是以键值对形式存储在客户端主机硬盘中,由服务器端发送给客户端,客户端再下一次访问服务器端时,服务器端可以获取到客户端Cookie缓存文件。
Cookie是由服务器端创建的,然后由服务器端发送给客户端,客户端以键值对形式存储Cookie,并标注Cookie的来源。客户端再次访问服务器端时,存储的Cookie会保存在请求协议中,服务器端可以获取上次存储的缓存文件内容。
综上所述,Cookie有如下几个特点:
- Cookie是HTTP协议的规范之一,它是服务器和客户端之间传输的小数据。
- 首先由服务器通过响应头把Cookie传输给客户端,客户端会将Cookie保存起来。
- 当客户端再次请求同一服务器时,客户端会在请求头中添加该服务器保存的Cookie,发送给服务器。
- Cookie就是服务器保存在客户端的数据。
- Cookie就是一个键值对。
Cookie规范
Http协议提供了有关Cookie的规范,如今市场上出现了大量的浏览器,一些浏览器对该Cookie规范进行了一些扩展,例如每个Cookie的大小为8KB,最多可保存500个Cookie等,但Cookie缓存文件不会占满硬盘空间。
Http协议的Cookie规范如下:
- Cookie通过请求头和响应头在服务器与客户端之间传输。
- Cookie大小上限为4KB。
- 一个服务器最多在客户端浏览器上保存20个Cookie。
- 一个浏览器最多保存300个Cookie。
Cookie类的常用方法
在JavaEE中提供了javax.servlet.http.Cookie类,该类提供了获取Cookie与设置Cookie的相关方法。
构造方法
Cookie(String name, String value)
代码示例:向客户端响应Cookies
// 创建Cookie实例对象
Cookie cookie = new Cookie("user_token", new Date().toString());
// 将Cookie实例对象添加到Response对象中
response.addCookie(cookie);
获取Cookie的名称
getName()
代码示例:读取请求中的Cookie
//通过Request对象获取请求中的Cookies
Cookie[] cookies = request.getCookies();
//判断请求中的Cookies是否存在
if(cookies != null){
//遍历所有Cookies
for (Cookie cookie : cookies) {
// 获取每一个Cookies的名称
String name = cookie.getName();
// 判断是否存在一个名为"user_token"的Cookie
if(name.equals("user_token")){
// 如果存在,打印到控制台中
System.out.println("user_token:"+cookie.getValue());
}
}
}
设置Cookie的值
setValue(String value)
获取Cookie的值
getValue()
设置Cookie的有效访问路径
setPath(String path)
代码示例:设置Cookie的有效访问路径为“/main”
// 创建Cookie实例对象
Cookie cookie = new Cookie("user_token", new Date().toString());
// 设置Cookie的有效访问路径
cookie.setPath("/main");
// 将Cookie实例对象添加到Response对象中
response.addCookie(cookie);
获取Cookie的有效访问路径
getPath()
设置Cookie的有效域名
setDomain(String pattern)
代码示例:设置Cookies的有效域名为“.wunian.com”
// 创建Cookie实例对象
Cookie cookie = new Cookie("user_token", new Date().toString());
// 设置Cookie的有效域名
cookie.setDomain(".wunian.com");
// 将Cookie实例对象添加到Response对象中
response.addCookie(cookie);
设置Cookie在浏览器上保持的时间,以秒为单位
setMaxAge(int expiry)
代码示例:设置持久Cookie的有效时间
// 创建Cookie实例对象
Cookie cookie = new Cookie("user_token", new Date().toString());
// 设置Cookie的有效时间为一天
cookie.setMaxAge(60*60*24);
// 将Cookie实例对象添加到Response对象中
response.addCookie(cookie);
获取Cookie在浏览器上保持的秒数
getMaxAge()
设置Cookie采用的协议版本
setVersion(String version)
获取Cookie采用的协议版本
getVersion()
设置Cookie的注解部分
setComment(String comment)
获取Cookie的注解
getComment()
设置Cookie是否使用安全的协议传送
setSecure(boolean isSecure)
获取Cookie是否使用安全的协议传送
getSecure()
Cookie的生命
所谓生命就是Cookie在客户端的有效时间,可以通过setMaxAge(int expiry)来设置Cookie的有效时间。
cookie.setMaxAge(-1)
Cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么Cookie就会消失。
cookie.setMaxAge(60*60)
表示Cookie对象可存活1小时。当生命大于0时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器或者重启客户端电脑,Cookie也会存活1小时。
cookie.setMaxAge(0)
Cookie生命等于0是一个特殊的值,它表示cookie被作废。通常用来删除一个Cookie。