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 voiddoGet(HttpServletRequest request, HttpServletResponse response)2 throwsServletException, 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 voiddoGet(HttpServletRequest request, HttpServletResponse response)2 throwsServletException, 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_java之Cookie详解相关推荐

  1. cookie详解(含vue-cookie)

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

  2. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  3. java中Freemarker list指令详解

    java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...

  4. JavaWeb Cookie详解

    代码地址如下: http://www.demodashi.com/demo/12713.html Cookie的由来 首先我们需要介绍一下,在Web开发过程中为什么会引入Cookie.我们知道Http ...

  5. 《Java和Android开发实战详解》——2.2节构建Java应用程序

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.2节构建Java应用程序,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  6. [java] 虚拟机(JVM)底层结构详解[转]

    [java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领 ...

  7. 转:Java 7 种阻塞队列详解

    转自: Java 7 种阻塞队列详解 - 云+社区 - 腾讯云队列(Queue)是一种经常使用的集合.Queue 实际上是实现了一个先进先出(FIFO:First In First Out)的有序表. ...

  8. tcp网络通信教程 java_基于java TCP网络通信的实例详解

    JAVA中设计网络编程模式的主要有TCP和UDP两种,TCP是属于即时通信,UDP是通过数据包来进行通信,UDP当中就会牵扯到数据的解析和传送.在安全性能方面,TCP要略胜一筹,通信过程中不容易出现数 ...

  9. ASP.NET 操作Cookie详解 增加,修改,删除

    ASP.NET 操作Cookie详解 增加,修改,删除 Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109.它 ...

  10. HTTP Cookie详解

    HTTP Cookie详解 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时 ...

最新文章

  1. kentico中自定义错误页面
  2. 为什么说基于比特币现金的0确认是必要的?
  3. 稀疏矩阵的压缩存储的两种策略
  4. PAT_B_1007_Java(20分)
  5. Mybatis构建sql语法
  6. testng连接MySQL_Selenium+TestNG实战-8-连接数据库方法去验证文章是否发布
  7. Python timeit模块的使用
  8. [jQuery基础] jQuery节点操作
  9. Android系统源代码情景分析
  10. iOS开发之将base64位编码的字符串转换为图片,data转图片,图片转data
  11. 什么是火星坐标系(GCJ-02)
  12. ie浏览器自动清理缓存简单设置方法
  13. php生成6位id,6位极品微信号?微信号id名字大全
  14. 多源传感器融合时的时间对齐或者时间同步问题
  15. PB调用C#开发的控制台应用——实现WORD文档按页转存JPG图片
  16. 适合玩游戏的蓝牙耳机有哪些?低延迟蓝牙耳机推荐
  17. iOS版本最新分布概况
  18. 使用 OpenWhisk 自建 Serverless 服务
  19. C++primeplus P368-P391
  20. 苹果CMS搭建影视网站教程

热门文章

  1. JS,CSS是前端,JAVA PHP ASP是后端,数据库是后端的处理对象,非代表前后底
  2. 一个学生成绩管理系统c语言,一个学生成绩管理系统C语言源代码
  3. 飞鱼星的虚拟服务器设置,设置简单功能丰富 三步就能设置好_飞鱼星 G7_网络设备无线网络和技术-中关村在线...
  4. 几个新的H5标签介绍
  5. Docker容器网络访问慢问题
  6. HTML小游戏2—— 2048网页版(附完整源码)
  7. 6950有史以来最经典玩机宝典/软件包/导航
  8. 无法查看MSN聊天记录 总弹出下载.xml文件的对话框
  9. Yahoo的Spark实践
  10. TCO14, I bought a watch last year