本篇供个人学习使用,有问题欢迎讨论

Cookie

一、Cookie引入

​ 当用户在未登录状态下在 “ 京东 ’ 购物网站向购物车中添加某些商品后,将浏览器关闭。然后再打开浏览器访问 “ 京东 ”,此时查看购物车会发现,购物车中仍然具有刚才添加的商品。那么这些商品信息是保存在哪里的呢?

​ 当在登录126邮箱时选上 “ 十天内免登录 ” ,再登录时的确是不需要输入用户名与密码了,那么是网站不需要对用户进行验证了?当然不是。那么,网站用于用户验证的用户名与密码是从哪里获取到的?


​ 这两个例子都有一个共同点:换台机器就不再是前面所述情况了。即换台电脑打开 “ 京东 ” 购物网站,购物车中就没有原来选好的商品了。换台电脑打开126网站,仍然需要输入用户名与密码。那就说明一个问题:那些信息是保存在客户端电脑里的,并没有保存在服务器中。将原来的电脑重启后,再次访问这些网站,发现购物车中仍有原来的商品, 126 网站仍然不需要输入用户名与密码。那就说明一个问题:那些信息是保存在客户端电脑的硬盘中的,而不是内存中。

客户端电脑中用于保存这些会话状态的资源,称为cookie。

二、 Cookie简介

Cookie 是1993年由网景公司(Netscape)前雇员发明的一种进行网络会话状态跟踪的技术。

​ 会话则是由一组请求与响应组成,是围绕着一件相关事情所进行的请求与响应。所以这些请求与响应之间一定是需要有数据传递的,即是需要进行会话状态跟踪的。然而HTTP协议是一种无状态协议,在不同的请求间是无法进行数据传递的。此时就需要一种可以进行请求间数据传递的会话跟踪技术,而 Cookie 就是一种这样的技术。

Cookie 是由服务器生成,保存在客户端的一种信息载体。这个载体中存放着用户访问该站点的会话状态信息。只要 Cookie 没有被清空,或者 Cookie 没有失效,那么,保存在其中的会话状态就有效。

​ 用户在提交第一次请求后,由服务器生成 Cookie,并将其封装到响应头中,以响应的形式发送给客户端。客户端接收到这个响应后,将 Cookie 保存到客户端。当客户端再次发送同类请求后,在请求中会携带保存在客户端的 Cookie 数据,发送到服务端,由服务器对会话进行跟踪。

​ Cookie 技术并不是 JavaWeb 开发专属技术,而是属于Web开发的技术,是所有 Web 开发语言均支持的技术。

​ Cookie 是由若干键值对构成,这里的键一般称为 name,值称为 value。 Cookie 中的键值对均为字符串。

三、谷歌下查看 Cookie

​ 不同的浏览器,其 Cookie 的保存位置及查看方式是不同的。删除了某一浏览器下的Cookie,不会影响到其它浏览器中的Cookie。

​ 在谷歌浏览器下可以直接查看到 Cookie 的信息。查看位置在:


四、Cookie的使用

1、Cookie 的使用

(1)如何创建一个 cookie 对象,来保存共享数据

Cookie cookie = new Cookie("key",共享数据名);

注意:一个 cookie 对象只能有一个键值对;cookie 对象只能存储 String 类型共享数据

(2)如何将Cookie写入到响应包的【响应头】

response.addCookie(cookie)

(3)如何从请求协议包的【请求头】读取浏览器返还的 cookie

Cookie array[] = request.getCookies();

2、设置绑定路径

cookie.setPath("/aaa/bbb/ccc");

3、cookie 对象的生命周期

(1)默认情况:cookie 是保存在浏览器的内存中。所以在浏览器关闭时,cookie 会被 windows 进行销毁。

(2)人工干预:要求将 Cookie 保存到客户端计算机的【硬盘上】,同时制定 cookie 在硬盘上存活

时间。在存活时间范围之内,关闭浏览器甚至关闭计算机,都不会导致 cookie 被销毁。

cookie1.setMaxAge(60 * 60);  //设置cookie的有效期为1小时
cookie2.setMaxAge(60 * 60 * 24 * 10);  //设置cookie的有效期为10天

注意:设置Cookie的有效期。这个值为一个整型值,单位为秒

该值大于0,表示将Cookie存放到客户端的硬盘

该值小于0,与不设置效果相同,会将Cookie存放到浏览器的缓存

该值等于0,表示Cookie一生成,马上失效

4、cookie 缺点

(1)一个 cookie 对象只能存放一个键值对,如果存储的数据较多, 需要管理多个 Cookie

(2)cookie 只能存放 String 类型数据,无法存放【高级类型Java数据,比如List、Map】

五、 Cookie的禁用


一旦禁用,有些浏览器可能会禁止客户端的访问!

六、免密登录的实现

1、页面部分

<form action="/myWeb/one.do" method="get">    用户名:<input type="text" name="username" value="${cookie.username.value }" /><br>     密码:<input type="password" name="password" value="${cookie.password.value }" /><br>    <input type="submit" value="登录">
</form>

2、对 Servlet 进行编辑

(1)接收用户提交的请求
response.setContentType("text/html;charset=UTF-8");
String username = request.getParameter("username");
String password =  request.getParameter("password");
PrintWriter out = response.getWriter();
(2)把用户的信息存储到 Cookie 中
if ("admin".equals(username) && "123".equals(password)){    Cookie cookie1 = new Cookie("username",username);    //创建cookie对象Cookie cookie2 = new Cookie("password",password);    cookie1.setMaxAge(60 * 10);    //设置Cookie的时间为10分钟cookie2.setMaxAge(60 * 10);    response.addCookie(cookie1);    //将Cookie写入到响应包的【响应头】中response.addCookie(cookie2);    out.println("欢迎回来," + username + "主人");
} else {    out.println("您的验证不合格,请重新输入!");
}

3、测试

(1)输入错误用户名或密码

(2)输入正确的用户名和密码,跳转到 OneServlet

上图表示用户名和密码已经存储到客户端上了,时间为10分钟

(3)关闭浏览器,重新进入页面时会发现页面上已经显示出用户名和密码了

七、VIP通道

1、初始化页面

<center>     <h1>新用户点餐页面</h1>     <form action="/myWeb/one.do">         客户:<input type="text" name="username" /><br>         饺子类型:<input type="radio" value="三鲜饺子" name="jiaozi">三鲜饺子         <input type="radio" value="虾仁饺子" name="jiaozi">虾仁饺子         <input type="radio" value="猪肉饺子" name="jiaozi">猪肉饺子<br>         <input type="submit" value="点餐" />     </form>     <h1>VIP通道</h1>     <a href="/myWeb/two.do">贵客里面请</a>
</center>

2、对接受点餐的数据进行设置OneServlet

(1)读取当前用户基本信息

String name = request.getParameter("username");
String jiaozi = request.getParameter("jiaozi");

(2)将当前用户的私人数据保存到 Cookie 中

Cookie cookie1 = new Cookie("key1",name);
Cookie cookie2 = new Cookie("key2",jiaozi);

(3)将 Cookie 对象写入到【响应包】中的【响应头】

response.addCookie(cookie1);
response.addCookie(cookie2);


读取Cookie:

3、当顾客再次点餐时,直接从VIP通道进入TwoServlet

(1)读取当前来访的浏览器推送回来的 Cookie

Cookie array[] = request.getCookies();

(2)根据得到的 Cookie,来招待当前用户

for (Cookie cookie:array){    String name = cookie.getName(); //读取Cookie中关键字名称    String value = cookie.getValue(); //读取Cookie中共享数据    if ("key1".equals(name)){        System.out.println(value + "客人,想死我啦!");    } else if ("key2".equals(name)){        System.out.println("我们早就将" + value + "准备好了");    }
}


在控制台中查看数据:

Cookie基础使用相关推荐

  1. CTFHUB http协议题目 学习笔记 详细步骤 请求方式 302跳转 cookie 基础认证 响应源代码

    CTFHUB http协议题目 学习笔记 详细步骤 请求方式 302跳转 cookie 基础认证 响应源代码 WEB-HTTP协议 1-请求方式 2-302跳转 3.cookie 4.基础认证 5.响 ...

  2. 前端Cookie基础知识

    一.简介 ​ Cookie(也称为HTTP Cookie.Web Cookie.浏览器 Cookie等等)是服务器发送到用户浏览器并保存在本地的一小块数据,该数据通常是用户账号相关的信息,不同浏览器对 ...

  3. 2019-04-12 cookie基础

    cookie      作为web服务器,必须能够采用一种机制来唯一标识一个用户,同时记录该用户的状态 会话cookie和持久化cookie cookie.setMaxAge(30) 设置cookie ...

  4. 【PHP基础】Cookie基础知识、应用案例代码及攻防

    目录 1 Cookie 理论基础 1.1 Cookie 简介 1.2 Cookie 认证机制 1.3 Cookie 属性 1.4 Cookie的安全性问题 2 Cookie 应用 2.1 Cookie ...

  5. C# 系统应用之Cookie\Session基础知识及php读取Cookie\Session

    本文主要是毕业设计"个人电脑使用记录清除软件"系列系统应用文章中关于Cookie方面的知识,主要从介绍Cookie的基础知识和PHP关于Cookie\Session两个会话管理机制 ...

  6. JavaScript 操作 Cookie

    从事web开发也有些日子了,cookie 是个啥差不多能说明白,可是实际自己一上手操作就是得去搜索(你们懂的),结果被鄙视了...所以就写一篇博文做为自己的学习笔记,嘿嘿,博客的好处在此体现出来了. ...

  7. 客户端与服务器cookie

    认识cookie 第一部分: 概要 cookie是一种早期使用的客户端存储机制(现在仍在广泛使用),cookie数据会在Web浏览器和Web服务器之间传输, 因为早期cookie是针对服务器脚本设计的 ...

  8. Cookie或将被替换!Chrome工程师提议新型HTTP状态管理协议

    问题 Cookie允许无状态的HTTP协议支持有状态会话,在web上,我们依靠Cookie实现了很多有趣的功能.即便如此,Cookie依然还是有很多问题:使用起来不够安全,浪费资源,使用一种令人惊讶的 ...

  9. cookie版购物车

    #region 添加到购物车AddShoppingCar /// <summary> /// 添加到购物车AddShoppingCar /// </summary> /// & ...

最新文章

  1. 机械工业出版社之道格·赫尔曼《Python 3标准库》目录
  2. 关于l ibrary not found for -lz.1.2.3 编译错误
  3. IntentService用法
  4. 一篇文章看懂Git是什么以及如何简单的上手Git
  5. java jta 例子_Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)...
  6. c#ovalshape_How to: Draw Shapes with the OvalShape and RectangleShape Controls (Visual Studio)
  7. web前端开发技术要求会什么
  8. python : 将txt文件中的数据读为numpy数组或列表
  9. 【es】ElasticSearch master 选举
  10. 海康相机回调方式理一下
  11. 再见Navicat! IDEA的这个兄弟真的很香!我粉了...
  12. 第五章 高级发布-订阅模式
  13. 高斯光束复振幅分布MATLAB
  14. JUCE学习笔记01-子组件与Graphics类
  15. 如何裁剪视频?这两个简单方法你们还不快来学
  16. 2.灰尘对计算机的影响,灰尘对电脑有影响不?
  17. 天猫精灵使用体验之二——家用电器的智能化改造(借助天猫精灵实现家用电器的语音控制)
  18. 企业级反向代理 Haproxy
  19. STM32之串口的使用
  20. Android 线程与线程安全

热门文章

  1. Java页面跳转失效_求助各位java大神,为什么表单提交之后跳转页面失灵
  2. Android Clipping
  3. 许纪霖《中华儒家文化发展脉络》思维导图
  4. 2022Java面试心得,35岁的程序员被裁
  5. BTC-Relay与RootStock侧链技术对比
  6. 表单输入框聚焦输入内容显示叉叉清除效果
  7. mysql的password()函数和md5函数
  8. Win7~Win10关闭任务栏缩略图
  9. TOEFL 托福综合写作模板【高级版+低级版】
  10. 【MC 网易-我的世界-mod开发基础笔记】 --- 前期准备