cookie
什么是cookie
- cookie是服务器通知客户端保存键值对的一种技术
- 客户端有了cookie后,每次请求都发送给服务器
- 每个cookie大小不能超过4kb
创建cookie
图解
在servlet 中使用如下代码来创建cookie
//创建cookie对象
Cookie username_Cookie =new Cookie("username","waynezheng");
//通知客户端保存cookie
response.addCookie(username_Cookie);
代码截图:
服务器获取cookie
服务器获取cookie就只有一行代码
//服务器获取cookie
Cookie[] cookies = req.getCookies();
cookie的属性
类型 | 方法名 | 方法解释 |
---|---|---|
String | getComment() | 返回cookie中注释,如果没有注释的话将返回空值. |
String | getDomain() | 返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同 一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如.yesky.com) |
int | getMaxAge() | 返回Cookie过期之前的最大时间,以秒计算。 |
String | getName() | 返回Cookie的名字。名字和值是我们始终关心的两个部分,笔者会在后面详细介绍 getName/setName。 |
String | getPath() | 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。 |
boolean | getSecure() | 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。 |
String | getValue() | 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。 |
int | getVersion() | 返回Cookie所遵从的协议版本。 |
void | setComment(String purpose) | 设置cookie中注释。 |
void | setDomain(String pattern) | 设置cookie中Cookie适用的域名 |
void | setMaxAge(int expiry) | 以秒计算,设置Cookie过期时间。 |
void | setPath(String uri) | 指定Cookie适用的路径。 |
void | setSecure(boolean flag) | 指出浏览器使用的安全协议,例如HTTPS或SSL。 |
void | setValue(String newValue) | cookie创建后设置一个新的值。 |
void | setVersion(int v) | 设置Cookie所遵从的协议版本。 |
修改cookie
方案一:
-
先创建一个要修改的同名的cookie对象, 在构造器,同时赋予新的cookie值
-
调用response.addCookie(cookie);
代码:
Cookie cookie = new Cookie("username", "dooms"); resp.addCookie(cookie);
方案二:
- 先查找到需要修改的Cookie对象
- 调用setValue()方法赋予新的Cookie值
- 调用response.addCookie()通知客户端保存修改
代码:
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
if ("username".equals(cookie.getName())){
cookie.setValue("avg");
resp.addCookie(cookie);
}
}
Cookie生命控制
setMaxAge()
示例代码:
Cookie cookie = new Cookie("key","value");
cookie.setMaxAge(-1);
response.addCookie(cookie);
正数,表示在指定的秒数后过期
负数,表示浏览器一关,Cookie就会被删除
零,表示马上删除Cookie
Cookie有效路径Path的设置
用法:cookie.setPath(路径);
Cookie的path属性设置可以有效的过滤哪些Cookie可以发送给服务器。哪些不发。path属性是通过请求的地址来进行有效的过滤
CookieA path=/工程路径
CookieB path=/工程路径/abc
请求地址如下:
http://ip:port/工程路径/a.html
CookieA 发送
CookieB不发送
http://ip:port/工程路径/abc/a.html
CookieA 发送
CookieB 发送
代码截图:
在http://ip:port/工程路径/abc/a.html下有cookie
http://ip:port/工程路径/a.html没有cookie