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 + "准备好了");    
    } 
}

在这里插入图片描述
在控制台中查看数据:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值