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. C3P0连接池工具类使用

    c3p0的基本连接配置文件 c3p0-config.xml <c3p0-config> <default-config> <property name="dri ...

  2. 安装CentOS 7 遇到的坑

    1,U盘安装 1.1  用最新版UltraISO刻录到U盘 坑1,如果之前不是用UltraISO刻录,或者不是最新版,u盘的label就不是系统自带的,当你选择install centos 7然后ta ...

  3. 转 linux任务调度之crontab命令

    crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...

  4. 51nod 1004 n^n的末位数字【快速幂】

    1004 n^n的末位数字 题目来源: Author Ignatius.L (Hdu 1061) 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出 ...

  5. springboot的配置文件

    一.springboot配置文件值的注入 @ConfigurationProperties(prefix = "xxx") 实例代码: @Component @Configurat ...

  6. 51Nod - 1405 树的距离之和(树形DP)

    1405 树的距离之和 题意 给定一棵无根树,假设它有n个节点,节点编号从1到n,求任意两点之间的距离(最短路径)之和. 分析 树形DP. 首先我们让 \(1\) 为根.要开两个数组 \(up \ d ...

  7. [BZOJ2142]礼物(扩展Lucas)

    2142: 礼物 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2286  Solved: 1009[Submit][Status][Discuss] ...

  8. JSP内置对象阶段案例

    1.login2: <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  9. MySQL命令show full processlist

    processlist命令的输出结果显示了有哪些线程在运行,可以检查当前数据库的运行状态,两种方式使用这个命令. 1 进入MySQL/bin目录下输入mysqladmin processlist; 2 ...

  10. Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结

    一.概述:Python中两种基本的数据结构是序列和映射,序列包含:可变的列表和不可变的元组:而当序列不够用时就出现了映射:字典.列表中的元素是可以变化的,元组里面的元素一旦初始化后就不可更改.列表和元 ...