多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # cookie ## 服务器端向客户端发送一个Cookie ### 创建Cookie: ~~~ Cookie cookie = new Cookie(String cookieName, String cookieValue); ~~~ 示例: ~~~ Cookie cookie = new Cookie("username","zhangsan"); ~~~ 那么该cookie会以响应头的形式发送给客户端: **注意:Cookie中不能直接存储中文,要存只能编码** ### 设置Cookie在客户端的持久化时间: ~~~ cookie.setMaxAge(int seconds); ---时间秒 //0删除cookie信息 ~~~ 注意:如果不设置持久化时间,cookie会存储在浏览器的内存中,浏览器关闭 cookie信息销毁(会话级别的cookie),如果设置持久化时间,cookie信息会 被持久化到浏览器的磁盘文件里 示例: ~~~ cookie.setMaxAge(10*60); ~~~ 设置cookie信息在浏览器的磁盘文件中存储的时间是10分钟,过期浏览器 自动删除该cookie信息 ### 设置Cookie的携带路径: ~~~ cookie.setPath(String path); ~~~ 注意:如果不设置携带路径,那么该cookie信息会在访问产生该cookie的 web资源所在的路径都携带cookie信息 示例: ~~~ cookie.setPath("/WEB16"); ~~~ 代表访问WEB16应用中的任何资源都携带cookie ~~~ cookie.setPath("/WEB16/cookieServlet"); ~~~ 代表访问WEB16中的cookieServlet及下面的url才携带cookie信息 ### 向客户端发送cookie 在响应头中多了:`Set-Cookie: key=value` ~~~ response.addCookie(Cookie cookie); ~~~ ### 删除客户端的cookie: 如果想删除客户端的已经存储的cookie信息, 那么就使用同名同路径的持久化时间为0的cookie进行覆盖即可 注意,删除cookie时,path必须一致,否则不会删除 ## 服务器端接受客户端Cookie cookie信息是以请求头的方式发送到服务器端的: ### 通过request获得所有的Cookie: ~~~ Cookie[] cookies = request.getCookies(); ~~~ 遍历Cookie数组,通过Cookie的名称获得我们想要的Cookie ~~~ for(Cookie cookie : cookies){ //cookie.getName()获取键 if(cookie.getName().equals(cookieName)){ String cookieValue = cookie.getValue(); //这边可以修改cookie,然后交给响应头 cookie.setValue("x"); response.addCookie(cookie); } } ~~~ cookie没有根据键获取值的方法 ## 有效域 设置cookie的有效域。.sina.com即是域,创建cookie时,调用setDomain()设置域——.sina.com,意味着用户访问新浪的时候会带着cookie过去。在实际开发中,设置了也是白设置。(ie)浏览器会默认禁止这种cookie,这种cookie称之为第三方cookie ~~~ public void setDomain(String pattern) ~~~ 如果设置一级域名相同,那么多个服务器之间cookie可以共享 ~~~ setDomain(".baidu.com") //tieba.baidu.com和news.baidu.com中可以共享 ~~~ 获取cookie的有效域 ~~~ public String getDomain() ~~~ ## 存中文 要想在cookie中存储中文,那么必须使用URLEncoder类里面的encode(String s, String enc)方法进行中文转码,例如: ~~~ Cookie cookie = new Cookie("userName", URLEncoder.encode("李阿昀", "UTF-8")); response.addCookie(cookie); ~~~ 在获取cookie中的中文数据时,再使用URLDecoder类里面的`decode(String s, String enc)`进行解码,例如: ~~~ URLDecoder.decode(cookies[i].getValue(), "UTF-8"); ~~~ ## EL表达式获取cookie ~~~ ${cookie.username.value} ~~~