在下面的内容中,我将介绍基于SpringMVC的一些Cookie常用操作,包括:cookie的增、删、改、查
一 Cookie的属性简介
对于一个Cookie来说,一般有以下几个属性:
Name:一个cookie的名字
Value:一个cookie的值
Domain:可以访问该cookie的域名。非顶级域名,如二级域名或者三级域名,设置的cookie的domain只能为顶级域名或者二级域名或者三级域名本身,不能设置其他二级域名的cookie,否则cookie无法生成;顶级域名只能设置domain为顶级域名,不能设置为二级域名或者三级域名,否则cookie无法生成;二级域名能读取设置了domain为顶级域名或者自身的cookie,不能读取其他二级域名domain的cookie。所以要想cookie在多个二级域名中共享,需要设置domain为顶级域名,这样就可以在所有二级域名里面或者到这个cookie的值了;顶级域名只能获取到domain设置为顶级域名的cookie,其他domain设置为二级域名的无法获取
Path:可以访问此cookie的页面路径
Expires/Max-Age:该cookie的超时时间。若设置为一个具体的时间,那么当到达此时间后,此cookie失效;不设置的话默认值是Session,当前会话结束后该cookie失效(PS:比如关闭浏览器)
Size:该cookie的大小
HTTP:cookie的httponly属性。若此属性为true,那么在客户端则不能通过脚本(PS:比如JavaScript)来读取该cookie值
Secure:若此属性为true,cookie 只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该cookie
注:该视图可以在浏览器中按F12,在Resources栏目中看到
二 关于Cookie的一个简单入门示例
(1)在一个Controller中手动设置cookie的一些参数:
@RequestMapping("/hello.html")
public ModelAndView hello(@CookieValue(name="hitCounter",defaultValue="0")Long hitCounter,HttpServletResponse response){
ModelAndView mAndView = new ModelAndView("hello");
hitCounter++;
Cookie hit = new Cookie("hitCounter", hitCounter.toString());
hit.setHttpOnly(true); //如果设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法访问该Cookie
hit.setMaxAge(60 * 60); //设置生存期为1小时
// hit.setDomain("www.zifansky.cn"); //子域,在这个子域下才可以访问该Cookie
// hit.setPath("/hello"); //在这个路径下面的页面才可以访问该Cookie
// hit.setSecure(true); //如果设置了Secure,则只有当使用https协议连接时cookie才可以被页面访问
response.addCookie(hit);
return mAndView;
}
在这里,通过手动创建了一个cookie,并设置了一系列的参数,最后通过HttpServletResponse传递到返回页中
(2)hello.jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>