*一、介绍
Cookie并不是它的原意'甜饼'的意思,而是一个保存在客户机中的简单的文本文件,这个文件与特定的 Web 文档关联
在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用,由于
“Cookie”具有可以保存在客户机上的神奇特性, 因此它可以帮助我们实现记录用户个人信息的功能, 而这一切都不必使用
复杂的CGI等程序举例来说, 一个 Web 站点可能会为每一个访问者产生一个唯一的ID, 然后以 Cookie 文件的形式保存
在每个用户的机器上。如果使用浏览器访问 Web, 会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都
是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的 Web 站点的信息。在这里的每个 Cookie 文件
都是一个简单而又普通的文本文件。透过文件名, 就可以看到是哪个 Web 站点在机器上放置了Cookie(当然站点信息
在文件里也有保存)
二、组成
Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期
、安全性、使用范围的可选属性组成
(1)Name/Value:设置Cookie的名称及相对应的值,对于认证Cookie,Value值包括Web服务器所提供的访问令牌
(2)Expires属性:设置Cookie的生存期。有两种存储类型的Cookie:会话性与持久性。Expires属性缺省时,为会话
性Cookie,仅保存在客户端内存中,并在用户关闭浏览器时失效;持久性Cookie会保存在用户的硬盘中,直至生存
期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效
(3)Path属性:定义了Web站点上可以访问该Cookie的目录
(4)Domain属性:指定了可以访问该 Cookie 的 Web 站点或域。Cookie 机制并未遵循严格的同源策略,允许一个子
域可以设置或获取其父域的 Cookie。当需要实现单点登录方案时,Cookie 的上述特性非常有用,然而也增加了
Cookie受攻击的危险,比如攻击者可以借此发动会话定置攻击。因而,浏览器禁止在 Domain 属性中设置.org、.com
等通用顶级域名、以及在国家及地区顶级域下注册的二级域名,以减小攻击发生的范围
等等。。。
三、工具类的编写
//创建一个CookieUtil的类
public static boolean addDefaultCookie(HttpServletResponse response,String key,String value){
return addCookie(response,key,value,-1);
}
public static boolean addCookie(HttpServletResponse response,String key, String value,int time) {
try {
value= URLEncoder.encode(value,"UTF-8");
key= URLEncoder.encode(key,"UTF-8");
Cookie cookie=new Cookie(key,value);
response.addCookie(cookie);
return true;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return false;
}
}
public static boolean addForeverCookie(HttpServletResponse response,String key, String value) {
return addCookie(response,key,value,Integer.MAX_VALUE);
}
public static boolean removeCookie(HttpServletResponse response,String key){
return addCookie(response,key,"",0);
}
public static String selectCookie(HttpServletRequest request,String key){
Cookie[] cookies=request.getCookies();
for(Cookie cookie:cookies){
if(Objects.equals(cookie.getName(),key)){
return cookie.getValue();
}
}
return null;
}
四、前端页面的查找
<script src="jq文件"></script>
<script src="jq.cookie文件"></script>
$.cookie("the_cookie");
$.cookie("the_cookie","value");
$.cookie("the_cookie","value",{Expires:1});