博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cookie技术
阅读量:5983 次
发布时间:2019-06-20

本文共 3316 字,大约阅读时间需要 11 分钟。

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的数据读取。

总结:

  1. 可以实现自动登录。用户名和密码默认是明码的。开发者需要自定义加密。Md5 Base64
  2. 购物车的商品ID信息
  3. 存储用户上次的登录时间

使用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                  // 获取Cookie20                  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          // 将这次访问的时间写入Cookie36          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没有调用setMaxAge方法,这个cookie没被放在文件里,而是放在客户端浏览器的内存中。

Cookie细节

  1. 一个Cookie只能存储一种信息。
  2. 一个网站可以发送多个Cookie,浏览器可以同时携带多个Cookie。
  3. 同一个网站最多发送20个Cookie,浏览器最多存储300个Cookie,一个Cookie最多存储数据在4K以内。
  4. 如果创建了Cookie对象没有指定最大有效时间那么不会存储在浏览器的缓存中。

转载于:https://www.cnblogs.com/friends-wf/p/3732195.html

你可能感兴趣的文章
中考在即,您为孩子选择什么?--读<<招生全攻略>>有感
查看>>
深入剖析 HTML5
查看>>
Mysql mysql.server启动脚本详解 .
查看>>
网格(GridView)+图片(ImageView)+文字(TextView)
查看>>
jquery遇上Ajax
查看>>
iptables
查看>>
我的友情链接
查看>>
RHEL-6.1/5.4安装Heartbeat-3-0-7有可能碰见的各种错误及解决方法
查看>>
win32控制台应用程序中使用CString类型的方法
查看>>
关于authlib集成windows ad失败的分析并解决[草稿]
查看>>
centos5.4 x86_64禁用的服务
查看>>
python中单元测试的常用语句
查看>>
阿里Java面试题剖析:为什么使用消息队列?消息队列有什么优点和缺点?
查看>>
3.2.4 Shell脚本--函数的用法
查看>>
ssh-keygen -t rsa -f cloud.key ssh -i cloud.key <username>@<instance_ip>
查看>>
培训机构管理系统帮助机构解决管理问题
查看>>
我的友情链接
查看>>
DISCUZ官方论坛模仿开发日志(二)
查看>>
Java设计模式系列之策略模式
查看>>
12个国外优秀.Net开源项目(转)
查看>>