Cookie是由server端生成。发送给User-Agent(通常是浏览器)。浏览器会将Cookie的key/value保存到某个文件夹下的文本文件内。下次请求同一站点时就发送该Cookie给server(前提是浏览器设置为启用cookie)。

Cookie名称和值能够由server端开发自定义。对于JSP而言也能够直接写入JSESSIONID用于标记一个会话(session),这样server能够知道该用户是否合法用户以及是否须要又一次登录等,server能够设置或读取Cookies中包括信息。借此维护用户跟server会话中的状态。

Cookie是client技术。而HttpSession是server端技术。

java中Cookie具体介绍:

1、Cookie是什么?

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

  client保存的Cookie信息,能够再次带给server。

  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。则client将该cookie带给server。



      比方浏览器存的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给server。

  domain:可选的。该Cookie所属的站点域名。

(apache.org)默认值。

  maximum age:可选的。不设置就是会话过程(存在浏览器的内存中)。

单位是秒

          假设是0。说明要删除。

  version:可选的。

3、怎样向client写Cookie:

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

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

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

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie cookie=new Cookie("name","Tom");
//设置Maximum Age
cookie.setMaxAge(1000);
//设置cookie路径为当前项目路径
cookie.setPath(request.getContextPath());
//加入cookie
response.addCookie(cookie);
}

4、server怎样得到client传来的Cookie:

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

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

只是此处存在一个问题:

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

原因非常easy:Cookie从server端发送到client时。信息是完整的,Cookie从客户器端发送到服务端时,信息仅仅剩下key、value了。

(由于Domain不正确的Cookie、Path不正确的Cookie、过期的Cookie,client是不会发送过来的)

那为什么Java中提供了对应的get方法呢? 那个方法事实上是在生成Cookie后,尚未发送到client时使用的

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

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out=response.getWriter();
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
String name=cookie.getName();
String value=cookie.getValue();
out.write(name+"="+value);
}
}
}

5、怎样区分Cookie:

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

博客园博客:欠扁的小篮子

java之Cookie具体解释的更多相关文章

  1. Java web Cookie详解(持久化+原理详解+共享问题+设置中文+发送多个Cookie)

    Java web Cookie详解 啥是cookie? 查询有道词典得: web和饼干有啥关系? 这个谜底等等来为大家揭晓 会话技术 web中的会话技术类似于生活中两个人聊天,不过web中的会话指的是 ...

  2. java对cookie的操作

    java对cookie的操作比较简单,主要介绍下建立cookie和读取cookie,以及如何设定cookie的生命周期和cookie的路径问题. 建立一个无生命周期的cookie,即随着浏览器的关闭即 ...

  3. java之Cookie详解

    Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是 ...

  4. JAVA操作COOKIE

    JAVA操作COOKIE 1.设置Cookie Cookie cookie = new Cookie("key", "value"); cookie.setMa ...

  5. Java路径操作具体解释

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或文件夹在硬盘上真正的路径.(URL和物理路径)比如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://w ...

  6. Java String类具体解释

    Java String类具体解释 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,非常多时候,我们对它既熟悉又陌生. 类结构: public fin ...

  7. 设计模式 - 迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释

    迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(ite ...

  8. Java 处理cookie的方法

    一.java创建cookie 方法一: Response.Cookies["userName"].Value = "patrick"; Response.Coo ...

  9. “全栈2019”Java第九章:解释第一个程序

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. NOIP2018提高组模拟题(二)

    咒语(curse) Description 亮亮梦到自己来到了魔法城堡,但一扇巨大的石门阻拦了他通向城堡内的路. 正当他沮丧之际,突然发现门上有一处机关,机关上有一张很长的纸条. 亮亮拿起纸条的一端, ...

  2. StringBuffer 清空

    几种方法: 方法1: 1 2 3 4 StringBuffer my_StringBuffer = new StringBuffer(); my_StringBuffer.append('hellow ...

  3. Beginning iOS 8 Programming with Swift-TableView

    UITableView控件使用 使用UITableView,在控件库中,拖拽一个Table View到ViewController中,在Controller的后台代码中需要继承UITableViewD ...

  4. Javascript模块化编程(二):AMD规范(转)

    这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要 ...

  5. 每天一个liunx命令2之rz和sz命令

    1安装命令工具包     yum install lrzsz   2sz命令发送文件到本地(send): sz filename 3rz命令本地上传文件到服务器(receive): rz 执行该命令后 ...

  6. MySQL EXPLAIN 命令详解学习

    http://blog.csdn.net/mchdba/article/details/9190771

  7. Delphi 使用 SPcomm 调试串口程序出现总是在程序断开的时候,才发送指令的问题。

    问题如上, 在与嵌入式程序串口程序通讯的时候, 总是出现如上问题, 造成的原因把下面的True改成false就可以了. 下图Spcomm的属性页,几个True全改成False再试试

  8. ubuntu10.10编译TQ2440的x86-qtopia-2.2.0编译问题解决精简版

    转:http://blog.csdn.net/zyxlinux888/article/details/6705480 操作:1.要安装系统缺失的类库和安装包(有些是非必须的):zyx@zyx:/$ s ...

  9. 【mybatis】in查询+判断list查询条件是否进行in查询

    mybatis中的in查询: 并且判断in查询的list是否为null或者list有值才进行In查询 <select id="find" parameterType=&quo ...

  10. VUE -- 安装新模块