@GetMapping("/change-username")
public String setcookie(HttpServletResponse response) {
// 创建 cookie
cookie cookie = new cookie("username", "jin");
//设置 cookie过期时间
cookie.setMaxAge(7 * 24 * 60 * 60); // 7天过期
//添加到 response 中
response.addcookie(cookie);
return "Username is changed!";
}
2、使用 Spring 框架提供的 @cookievalue 注解获取特定的 cookie 的值
@GetMapping("/")
public String readcookie(@cookievalue(value = "username", defaultValue = "jin") String username) {
return "Hey! My username is " + username;
}
3、读取所有的 cookie 值
@GetMapping("/all-cookies")
public String readAllcookies(HttpServletRequest request) {
cookie[] cookies = request.getcookies();
if (cookies != null) {
return Arrays.stream(cookies)
.map(c -> c.getName() + "=" + c.getValue()).collect(Collectors.joining(", "));
}
return "No cookies";
}
cookie类的主要方法
| No. | 方法 | 类型 | 描述 |
| 1 | cookie(String name, String value) | 构造方法 | 实例化cookie对象,传入cooke名称和cookie的值 |
| 2 | public String getName() | 普通方法 | 取得cookie的名字 |
| 3 | public String getValue() | 普通方法 | 取得cookie的值 |
| 4 | public void setValue(String newValue) | 普通方法 | 设置cookie的值 |
| 5 | public void setMaxAge(int expiry) | 普通方法 | 设置cookie的最大保存时间,即cookie的有效期 |
| 6 | public int getMaxAge() | 普通方法 | 获取cookies的有效期 |
| 7 | public void setPath(String uri) | 普通方法 | 设置cookie的有效路径,比如把cookie的有效路径设置为"/xdp",那么浏览器访问"xdp"目录下的web资源时,都会带上cookie |
| 8 | public String getPath() | 普通方法 | 获取cookie的有效路径 |
| 9 | public void setDomain(String pattern) | 普通方法 | 设置cookie的有效域 |
| 10 | public String getDomain() | 普通方法 | 获取cookie的有效域 |
1、在使用cookie的时候,首先要注意浏览器是否支持cookie,可以设置浏览器,使其支持使用cookie
2、如果要使cookie保存中文的信息,需要使用java.net.URLEncoder类的encode方法进行编码,需要使用java.net.URLDecoder的decode方法进行解码
// 对request传过来的参数设置编码格式,以免传入中文的时候出现问题,必须在request.getParameter之前设置
request.setCharacterEncoding("utf-8");
// 对字符串以utf8的格式进行编码
String name=URLEncoder.encode(request.getParameter("username"),"utf-8");
3、浏览器一般只允许存放300个cookie,每个站点最多存放20个cookie,每个cookie的大小限制为4KB。
4、如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。



