Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,对于JSP而言也可以直接写入JSESSIONID用于标记一个会话(session),这样服务器可以知道该用户是否合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

Cookie是客户端技术,而HttpSession是服务器端技术。

java中Cookie详细介绍:

1、Cookie是什么?

  一个小信息,由服务器写给浏览器的。由浏览器来保存。

  客户端保存的Cookie信息,可以再次带给服务器。

  Cookie类:javax.servlet.http.Cookie

2、Cookie的属性:

  name:必须的

  value:必须的

  comment:可选的。注释

  path: 可选的,如果不设置路径,那么只有设置该cookie的URI及其子路径可以访问

      写Cookie的程序的访问路径是:http://localhost:8080/JavaWeb/servlet/CookieDemo

      其中:localhost就是域名;/JavaWeb/servlet就是当前Cookie的path

      若访问的地址的URI包含着cookie的路径,即URI.startWith(cookie的路径),为true,则客户端将该cookie带给服务器。

      比如浏览器存的cookie的路径是/JavaWeb
      现在访问的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo  则带该cookie
      现在访问的地址是:http://localhost:8080/JavaWeb/CookieDemo  则带该cookie

      若浏览器存的cookie的路径是/JavaWeb/servlet/
      访问的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo   则带该cookie
      访问的地址是:http://localhost:8080/JavaWeb/CookieDemo   则不带该cookie

      如果一个cookie的路径设置成了/JavaWeb,意味着浏览器访问当前应用下的所有资源时都会带着该cookie给服务器。

  domain:可选的。该Cookie所属的网站域名。(apache.org)默认值。

  maximum age:可选的。不设置就是会话过程(存在浏览器的内存中)。单位是秒
          如果是0,说明要删除。

  version:可选的。

3、如何向客户端写Cookie:

HttpServletResponse对象.addCookie(javax.servlet.http.Cookie对象)(就是写了一个响应消息头:Set-Cookie:cookie的信息)

Servlet规范中的Cookie API 提供了setMaxAge  setPath setDomain等方法,可以对Cookie状态进行控制

特点:一个浏览器针对一个网站最多存20个Cookie;最多存300个Cookie,每个Cookie的长度不能超过4KB(稀缺)。只是规定,但不同的浏览器实现的不同。

 1     public void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         Cookie cookie=new Cookie("name","Tom");
 4         //设置Maximum Age
 5         cookie.setMaxAge(1000);
 6         //设置cookie路径为当前项目路径
 7         cookie.setPath(request.getContextPath());
 8         //添加cookie
 9         response.addCookie(cookie);
10     }

4、服务器如何得到客户端传来的Cookie:

在Java中利用Serlvet或者JSP scriptlet可以向浏览器端写入Cookie,同样,利用Servet或者JSP scriptlet 也可以读取到 Cookie信息

Servlet规范中的Cookie API 同样存在getMaxAge  getPath  getDomain等方法,可以获得相应的状态。

不过此处存在一个问题:

读取Cookie时,发现除了Cookie的key和value外,其他值获取都为null。

原因很简单:Cookie从服务器端发送到客户端时,信息是完整的,Cookie从客户器端发送到服务端时,信息只剩下key、value了。(因为Domain不对的Cookie、Path不对的Cookie、过期的Cookie,客户端是不会发送过来的)

那为什么Java中提供了相应的get方法呢? 那个方法其实是在生成Cookie后,尚未发送到客户端时使用的

服务器端通过HttpServletRequest对象.getCookies()可获取cookies数组。

 1     public void doGet(HttpServletRequest request, HttpServletResponse response)
 2             throws ServletException, IOException {
 3         PrintWriter out=response.getWriter();
 4         Cookie[] cookies=request.getCookies();
 5         if(cookies!=null){
 6             for(Cookie cookie:cookies){
 7                 String name=cookie.getName();
 8                 String value=cookie.getValue();
 9                 out.write(name+"="+value);
10             }
11         }
12     }

5、如何区分Cookie:

通过名称不行,应通过domain+path+name来区分的。

转载于:https://www.cnblogs.com/z941030/p/4742188.html

java之Cookie详解相关推荐

  1. Java中Cookie详解

    最近复习到了Cookie和Session,这里系统的讲解一下Cookie和Session.在学习这个之前,我们需要了解,会话的定义. 会话是指某一个人打开浏览器,访问多个页面,然后关闭浏览器的这个过程 ...

  2. php java集成_PHP和Java 集成开发详解分析 强强联合第1/4页

    PHP和Java 集成开发详解分析 强强联合第1/4页 更新时间:2008年11月14日 12:28:23   作者: 很久以前,有人从www上看到看到天空上一个很亮的亮点,它就是Java语言,与此同 ...

  3. cookie详解(含vue-cookie)

    今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://mp.weixin.qq.com/s/NXrH7R8y2Dqxs9Ekm0u33w 原文如下,记录到此供以 ...

  4. Java内存溢出详解之Tomcat配置

    Java内存溢出详解 转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError ...

  5. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  6. Java类加载机制详解【java面试题】

    Java类加载机制详解[java面试题] (1)问题分析: Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数 ...

  7. Java线程池详解学习:ThreadPoolExecutor

    Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...

  8. Java 线程池详解学习:FixedThreadPool,CachedThreadPool,ScheduledThreadPool...

    Java常用的线程池有FixedThreadPool和CachedThreadPool,我们可以通过查看他们的源码来进行学习. Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) ...

  9. 关于Java的Classpath详解

    关于Java的Classpath详解 Java 的新入门者对classpath往往比较困惑,为何在开发环境中能运行的东东出去就不好,或在外面运行的东东挺溜的进了开发环境就死菜. java的优点就是他是 ...

最新文章

  1. 基于OpenCV的行人目标检测
  2. OpenSceneGraph 笔记--如何导出三角形数据
  3. 问题集录--如何本地调试微信接口(未测试)
  4. zip压缩与解压缩示例
  5. 确保您的物联网部署具备5G功能
  6. 写一个使两个整数进行交换的方法(不能使用临时变量) 【前端每日一题-27】...
  7. DM365 使用BT656协议驱动LCD的实现
  8. 亚马逊S3文件存储的可视化
  9. Windows消息机制以及相关API
  10. pytorch clamp 与clamp_区别
  11. 优秀程序员是怎样提高敲代码的效率?有这些工具就够了!
  12. 走进JavaScript
  13. 路由器总是有信号无网络连接到服务器,路由器信号满格但是没有网络怎么办
  14. ES6标准入门(阮一峰)-阅读记录与心得
  15. (转)扰码Scrambling和扩频码(PN码)的区别
  16. TensorFlow北大公开课学习笔记-4.3滑动平均
  17. 细数SAP Business One主流实施与服务商
  18. 蓝字冲销是什么意思_在记账凭证中冲销是什么意思
  19. 2011 各大IT公司笔试面试题目
  20. c语言书面作业,华软C语言书面作业14

热门文章

  1. 网络人工智能研究方向有哪些?
  2. typedef 的使用
  3. 关于position定位的总结
  4. CSS3秘笈复习:第十一章
  5. struts 国际化
  6. 基于.net开发chrome核心浏览器【五】
  7. 在Mac OS X上利用Spotlight搜索代码
  8. 我的2013——不平凡的第一次
  9. sum-ftp-w.sh
  10. selenium课程笔记2--selenium操作chrome浏览器