Cookie基础使用
本篇供个人学习使用,有问题欢迎讨论
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基础使用相关推荐
- CTFHUB http协议题目 学习笔记 详细步骤 请求方式 302跳转 cookie 基础认证 响应源代码
CTFHUB http协议题目 学习笔记 详细步骤 请求方式 302跳转 cookie 基础认证 响应源代码 WEB-HTTP协议 1-请求方式 2-302跳转 3.cookie 4.基础认证 5.响 ...
- 前端Cookie基础知识
一.简介 Cookie(也称为HTTP Cookie.Web Cookie.浏览器 Cookie等等)是服务器发送到用户浏览器并保存在本地的一小块数据,该数据通常是用户账号相关的信息,不同浏览器对 ...
- 2019-04-12 cookie基础
cookie 作为web服务器,必须能够采用一种机制来唯一标识一个用户,同时记录该用户的状态 会话cookie和持久化cookie cookie.setMaxAge(30) 设置cookie ...
- 【PHP基础】Cookie基础知识、应用案例代码及攻防
目录 1 Cookie 理论基础 1.1 Cookie 简介 1.2 Cookie 认证机制 1.3 Cookie 属性 1.4 Cookie的安全性问题 2 Cookie 应用 2.1 Cookie ...
- C# 系统应用之Cookie\Session基础知识及php读取Cookie\Session
本文主要是毕业设计"个人电脑使用记录清除软件"系列系统应用文章中关于Cookie方面的知识,主要从介绍Cookie的基础知识和PHP关于Cookie\Session两个会话管理机制 ...
- JavaScript 操作 Cookie
从事web开发也有些日子了,cookie 是个啥差不多能说明白,可是实际自己一上手操作就是得去搜索(你们懂的),结果被鄙视了...所以就写一篇博文做为自己的学习笔记,嘿嘿,博客的好处在此体现出来了. ...
- 客户端与服务器cookie
认识cookie 第一部分: 概要 cookie是一种早期使用的客户端存储机制(现在仍在广泛使用),cookie数据会在Web浏览器和Web服务器之间传输, 因为早期cookie是针对服务器脚本设计的 ...
- Cookie或将被替换!Chrome工程师提议新型HTTP状态管理协议
问题 Cookie允许无状态的HTTP协议支持有状态会话,在web上,我们依靠Cookie实现了很多有趣的功能.即便如此,Cookie依然还是有很多问题:使用起来不够安全,浪费资源,使用一种令人惊讶的 ...
- cookie版购物车
#region 添加到购物车AddShoppingCar /// <summary> /// 添加到购物车AddShoppingCar /// </summary> /// & ...
最新文章
- 机械工业出版社之道格·赫尔曼《Python 3标准库》目录
- 关于l ibrary not found for -lz.1.2.3 编译错误
- IntentService用法
- 一篇文章看懂Git是什么以及如何简单的上手Git
- java jta 例子_Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)...
- c#ovalshape_How to: Draw Shapes with the OvalShape and RectangleShape Controls (Visual Studio)
- web前端开发技术要求会什么
- python : 将txt文件中的数据读为numpy数组或列表
- 【es】ElasticSearch master 选举
- 海康相机回调方式理一下
- 再见Navicat! IDEA的这个兄弟真的很香!我粉了...
- 第五章 高级发布-订阅模式
- 高斯光束复振幅分布MATLAB
- JUCE学习笔记01-子组件与Graphics类
- 如何裁剪视频?这两个简单方法你们还不快来学
- 2.灰尘对计算机的影响,灰尘对电脑有影响不?
- 天猫精灵使用体验之二——家用电器的智能化改造(借助天猫精灵实现家用电器的语音控制)
- 企业级反向代理 Haproxy
- STM32之串口的使用
- Android 线程与线程安全