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来区分的。

java中Cookie详细介绍相关推荐

  1. java中file_详细介绍Java中的File类

    构造方法File f = new File("文件路径") File f = new File("parent","child") 创建一个 ...

  2. java中的泛型是什么_Java中泛型是什么?Java泛型的详细介绍

    本篇文章给大家带来的内容是关于Java中泛型是什么?Java泛型的详细介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.什么是泛型? Java泛型设计原则:只要在编译时期没有出 ...

  3. Java中List集合介绍(炒鸡详细呦)

    Java中List集合介绍 文章目录 Java中List集合介绍 1,Java集合介绍 2,List介绍 2.1 ArrayList集合 2.2 LinkedList集合 3,List常用方法 3.1 ...

  4. java中ThreadPool的介绍和使用

    文章目录 Thread Pool简介 Executors, Executor 和 ExecutorService ThreadPoolExecutor ScheduledThreadPoolExecu ...

  5. HTML中Css详细介绍

    HTML中Css详细介绍 一.样式表的作用 1.Css样式表,层叠样式表 2.类似于人类的衣服,网页的衣服 3.作用:美化网页 4.优势: 1.内容与表现分离,便于维护 2.样式丰富,页面布局灵活 3 ...

  6. Java中BigDecimal类介绍及用法

    Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...

  7. javac 与java_javac中使用-d,以及javac / java中使用-cp介绍

    javac中使用-d,以及javac / java中使用-cp介绍 发布时间:2019-01-15 20:39, 浏览次数:555 , 标签: javac java cp * 一般生成把java编译成 ...

  8. JavaAccessBridge(Java访问桥)详细介绍

    Java Access Bridge 通过 Java 访问桥 API,您可以给使用Java应用程序编写的在windows系统上运行的图形化系统开发辅助技术应用程序.它包含本机方法,使您能够查看和操作有 ...

  9. java之Stack详细介绍

    1  Stack介绍 Stack简介 Stack是栈.它的特性是:先进后出(FILO, First In Last Out). java工具包中的Stack是继承于Vector(矢量队列)的,由于Ve ...

最新文章

  1. 如何量化医学图像分割中的置信度?
  2. 【Zookeeper系列】ZooKeeper管理分布式环境中的数据(转)
  3. 剑指offer:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
  4. Java高级-线程同步lock与unlock使用
  5. ip 地址 192.168.1.255 代表( )。_ip地址基础入门知识
  6. ASP.NET MVC 个人学习笔记之 Controller传值
  7. 计算机出现假桌面怎么解决办法,win10系统apphangxprocb1引起桌面假死怎么解决【图文】...
  8. 怎么引jsp包_电机引接线的制作流程防护等级
  9. JEECG 3.6.3版本发布 企业级JAVA快速开发平台
  10. libuv 和 libev的对比
  11. 软件 Bug 引发的致命事故,程序员责任何在?| 技术头条
  12. Torch7框架学习资料整理
  13. 重拾数月前做的微信红包小项目
  14. 最后7天!阿里云2020云内存数据库峰会现场参会报名中
  15. 边缘计算对于基础架构和运营领导者意味着什么
  16. dism++封装系统使用教程_【原创】最新WIN10系统封装教程2019系列(一)——定制母盘...
  17. FA:萤火虫算法的改进及Python实现
  18. CVPR2021投稿要求
  19. 微博+java平台_【基于JavaEE的微博平台设计最终版材料】
  20. 电脑增加机械硬盘计算机管理,电脑加装机械硬盘直接插上就行了么

热门文章

  1. python暑期实践8.10
  2. 小白学习Hibernate遇到的错误以及解决办法(GenerationTarget encountered exception accepting command : Error executing)
  3. CANDENCE 焊盘封装心得(欢迎拍砖 都来拍砖)
  4. Django基础必备三神装(HttpResponse、render,、redirect)
  5. 今天花了些时间捯饬了下Silverlight,可是DEBUG时出了这么个状况
  6. 开发艺术探索之RemoteView学习
  7. c语言中pause的作用,啊哈C语言编程-第4课-system(“pause”)的使用
  8. system(“pause“)无效
  9. python编写base64加密解密
  10. 取消快捷方式图标箭头(注册表)