u 常用的API
创建Cookie对象
Cookie(String name, String value) ->以指定数据创建Cookie对象
设置Cookie对象
void setMaxAge(int expiry)
->设置Cookie的最大有效时间
void setPath(String uri)
->设置Cookie的有效路径
void setDomain(String
pattern)
->设置Cookie的有效域
发送Cookie对象
void addCookie(Cookie
cookie)
->发送Cookie对象
获取Cookie对象
Cookie[]
getCookies()
->获取用户请求中的Cookie数组
获取Cookie中携带信息
int getMaxAge()
->获取Cookie的最大有效时间
String getName()
->获取Cookie的名字
String getValue()
->获取Cookie存储的值
String getDomain()
->获取Cookie的有效域
String
getPath()
->获取Cookie的有效路径
读和写多个Cookie
如果给客户端输出多个Cookie对象,那么服务器会创建多个
Set-Cookie: name=jack; Expires=Wed, 16-Jan-2013 07:02:01 GMT
Set-Cookie: password=root; Expires=Wed, 16-Jan-2013 07:02:01
GMT头字段进行Cookie的发送。
多个Cookie在浏览器缓存中以一个文件的形式进行存储。
浏览器使用一个Cookie: name=jack; password=root带多个Cookie数据。
Cookie有效路径
以上的代码在第一次写回Cookie后,如果后面继续请求该网站的其他资源,那么还会继续携带Cookie对象直到Cookie过期。但是如果访问不同网站那么不带该Cookie。
cookie2.setPath("/day08/read");
Set-Cookie: password=root; Expires=Wed, 16-Jan-2013 07:25:06 GMT;
Path=/day08/read
存储的时候由于两个Cookie的有效路径不同,因此存储在不同的Cookie文件中。
但是指定有效路径的Cookie文件中多了有效路径的值。
password
root
localhost/day08/read
但是如果现在需要在不同的网站中传递Cookie对象,那么如何指定有效路径。
cookie2.setPath("/"); à 指定Cookie的有效路径是tomcat的webapps目录
Cookie的跨域
假定A服务器上发布一个网站叫CMS系统,域名www.sina.com.cn
在CMS系统中可以直接编写一个写Cookie的Servlet。但是要设置该Cookie的有效域。
cookie.setDomain(“.163.com”);
假定B服务器上发布一个网站叫IT系统,域名www.163.com
编写一个获取Cookie数据的Servlet进行Cookie的数据读取。
总结:
- 可以实现自动登录。用户名和密码默认是明码的。开发者需要自定义加密。Md5 Base64
- 购物车的商品ID信息
- 存储用户上次的登录时间
使用Cookie实现显示用户的上次访问时间
1 public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
2 // 页面输出
3 response.setCharacterEncoding("utf-8");
4 response.setContentType("text/html;charset=utf-8");
5 request.setCharacterEncoding("utf-8");
6 // 获取字符输出流对象
7 PrintWriter out = response.getWriter();
8 // 获取Cookie数组对象
9 Cookie [] cookies = request.getCookies();
10 // 定义一个时间的字符串变量
11 String date = null;
12 // 定义一个变量存储系统当前日期
13 Date current_date = new Date();
14 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
15 // 判断是否是第一次登陆
16 if(cookies != null){
17 // 直接循环
18 for(Cookie cookie : cookies){
19 // 获取Cookie
20 if("lasttime".equals(cookie.getName())){
21 // 获取上次访问的时间
22 date = cookie.getValue();
23 break;
24 }else{
25 // 获取系统时间
26 date = format.format(current_date);
27 }
28 }
29 }else{
30 // 获取系统时间
31 date = format.format(current_date);
32 }
33 // 显示时间
34 out.println(date);
35 // 将这次访问的时间写入Cookie
36 Cookie new_cookie = new Cookie("lasttime",
37 format.format(new Date()));
38 new_cookie.setMaxAge(5*60);
39 new_cookie.setPath("/day08/showtime");
40 // 发送
41 response.addCookie(new_cookie);
42 }
Cookie细节
- 一个Cookie只能存储一种信息。
- 一个网站可以发送多个Cookie,浏览器可以同时携带多个Cookie。
- 同一个网站最多发送20个Cookie,浏览器最多存储300个Cookie,一个Cookie最多存储数据在4K以内。
- 如果创建了Cookie对象没有指定最大有效时间那么不会存储在浏览器的缓存中。
Cookie技术