bt365最新网站-bte365娱乐线-bt365官方网站

cookie的详细解释以及应用

​ 一.Cookie概述 1.1什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie就是一个

cookie的详细解释以及应用

一.Cookie概述

1.1什么叫Cookie

Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。

1.2Cookie规范

你大可以放心,Cookie不会占满你的硬盘。因为一个Cookie最多只有4KB,并且浏览器最多可以保存300个Cookie。当然,在浏览器大战的今天,一些浏览器为了打败对手,可能对Cookie规范“扩展”了一些,例如每个Cookie的大小为8KB,最多可保存500个Cookie等!但也不会出现把你硬盘占满的可能!

不同的浏览器之间不能共享Cookie!!!

1.3Cookie的作用

Cookie的作用可大了,但无论怎么夸大Cookie的作用都离不开“跟踪客户端状态”这句话。我们知道Cookie是服务器保存在客户端的信息,然后客户端会在下次请求时把Cookie在还给服务器,这样服务器就可以通过信息来识别客户端了。

二.Cookie示例

2.1保存Cookie到客户端

这是响应工作的一部分,所以这个方法是response对象的。并且Cookie是HTTP协议中的内容,所以保存Cookie是HttpServletResponse类的方法。

void addCookie(Cookie c):添加Cookie对象到当前response对象中,这个方法可以被调用多次,从而完成添加多个Cookie对象到response中。

Cookie cookie = new Cookie("username", "txjava"); response.addCookie(cookie);

通过浏览器的开发者工具我们可以看到,该请求的响应头中被添加了Set-Cookie的值:

同样根据浏览器的开发者工具我们可以看到http://localhost:8080的网址的cookie中被加入了username=txjava的信息:

这时我们再对服务器进行访问就会发现,访问服务器时请求时带着cookie的值的:

2.2.服务器端读取Cookie

我们现在已经可以保存Cookie到客户端了,但还没有学习让服务器如何读取Cookie。

如果浏览器保存了Cookie,那么会在下一次请求时把Cookie放到请求头中发送给服务器,这时服务器需要在请求中读取Cookie。既然是在请求中读取,那么当然是使用request对象来读取了。

HttpServletRequest:Cookie[] getCookies()

示例:

Cookie[] cookies = request.getCookies(); if(cookies != null){ for(Cookie cookie : cookies){ System.out.println(cookie.getName() +":"+ cookie.getValue()); } }

三.Cookie生命周期

Cookie会在客户端存活多久呢?这就是Cookie的生命了。默认情况下,Cookie只在浏览器的内存中存活,也就是说,当你关闭浏览器后,Cookie就会消失!

可以使用Cookie#setMaxAge(int expiry)来设置Cookie的存活时间。参数expiry表示Cookie存活的秒数。

cookie.setMaxAge(60*60*24*30*12):表示cookie对象可存活1小时。就算关闭浏览器,就算重启客户端电脑,cookie也会存活1小时。因为当maxAge大于0时,浏览器不仅会把cookie保存在浏览器内存中,还会把cookie保存到硬盘上。cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1(其实只要是负数都是一个意思),表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。cookie.setMaxAge(0):cookie被作废!表示cookie即不在内存中存活,也不在硬盘上存活,这样的cookie设置只有一个目的,那就是覆盖客户端原来的这个cookie,使其作废。

四.Cookie的浏览器管理

4.1Google Chrom

4.1.1查看cookie

4.1.2清理cookie

设置-隐私设置和安全性-清除浏览数据:

4.2Firefox

4.2.1查看Cookie

4.2.2清理Cookie

选项 - 隐私与安全 - Cookie和网站数据 - 清除数据

五.Cookie的路径

5.1Cookie的path属性

Cookie还有一个path属性,可以通过Cookie#setPath(String)方法来设置。你可以使用HttpWatch查看响应中的Set-Cookie中是否存在路径。下面是通过Chrome查看Cookie信息。

也就是说,就算你不设置Cookie的path,Cookie也是有路径的。这个路径就是请求的路径。例如在请求:

http://localhost:8080/cookie_demo/path

时,服务器响应了一个Cookie,那么这个Cookie的默认路径就是/cookie_demo。

如果是在请求:

http://localhost:8080/cookie_demo/path/son

时,服务器响应了一个Cookie,那么这个Cookie的默认路径就是/cookie_demo/path。

5.2Cookie 路径的作用:

到现在我们还没说过Cookie的path有什么用,现在我们来聊聊path的作用。首先声明一点,path不是指Cookie在客户端存放的路径!!!不同的浏览器存放Cookie的路径是不同的!!!你不能通过Cookie的path来指定Cookie文件的存放路径!!!

那么Cookie的path是干什么的呢?假设你的浏览器当前已经有了两个Cookie:

cookie1:name=path1;value=pathvalue1;path=/cookie_demo;cookie2:name=path1;value=pathvalue2;path=/cookie_demo/path;

当访问http://localhost:8080/cookie_demo/*时,请求头中会包含cookie1,而不会包含cookie2。

当访问http://localhost:8080/cookie_demo/path/*时,请求头中会包含cookie1和cookie2。

也就是说,在访问子路径时,会包含其父路径的Cookie,而在访问父路径时,不包含子路径的Cookie。

5.3Cookie路径的使用

如果你想在BServlet中设置的Cookie,在客户端访问AServlet时也包含在请求头中,那么就需要设置BServlet中的Cookie的path:

c2.setPath(“/cookie_demo”):硬编码;c2.setPath(request.getContextpath() + “/”):活编码。

这样就可以设置Cookie的路径,保存在访问AServlet时,也会包含BServlet中添加的Cookie。

Cookie的SetPath设置cookie的路径,这个路径直接决定服务器的请求是否会从浏览器中加载某些cookie。

首先默认情况如果不设置cookie的path,默认是 /项目名称/当前路径的上一层地址如:请求路径:/cookie_demo/servlet/login, cookie的路径:/cookie_demo/servlet

如果我们设置path,如果当前访问的路径包含了cookie的路径(当前访问路径在cookie路径基础上要比cookie的范围小)cookie就会加载到request对象之中。

六.Cookie保存中文

Cookie中是不可以设置中文的,但可以使用URLEncodor.encode()方法编码后在存放到Cookie中。在获取Cookie时,需要先使用URLDecoder.decode()方法解码,再使用。

添加cookie:

Cookie cookie1 = new Cookie("username", URLEncoder.encode(username,"UTF-8"));

读取cookie:

Cookie[] cookies = request.getCookies(); if(cookies != null){ for(Cookie cookie : cookies){ if(cookie.getName().equals("username")) username = URLDecoder.decode(cookie.getValue(),"UTF-8"); if(cookie.getName().equals("password")) password = cookie.getValue(); } }

七.Cookie的禁用

默认情况下浏览器的cookie是被启用的,但是其实我们是可以手动的禁用cookie的,强烈不建议禁用cookie;

Cookie一旦被禁用掉绝大多数互联网的网站都无法登录,这个跟我们后续要讲解的session有关。

那么我们如何通过程序来通过程序判断用户的浏览器上的cookie是否被禁用了呢,其实很简单,我们可以通过去刚刚添加的cookie,如果没有取到,说明cookie被禁用。​

← 上一篇: 地下城与勇士搬钢铁职业选啥?这篇文章全告诉你!
下一篇: DNF超时空之战怎么坐飞机_超时空之战坐飞机稳定吗? →

相关推荐

省呗打款多长时间?竟然与这么多因素有关!

省呗打款多长时间?竟然与这么多因素有关!

省呗打款多长时间?竟然与这么多因素有关! 刘玥 2018-09-18 10:06:18 希财网 省呗是一个老牌的信用卡代还软件,还了“借现金”的功能,同时实

3、《英雄联盟》电视剧在哪个软件里可以看

3、《英雄联盟》电视剧在哪个软件里可以看

请问看lol解说视频哪个软件好如果是手机端的话,可以用1006tv来看,分类比较详细。如果是电脑端的话,建议YY直播和斗鱼TV的直播,这两个基本

良心推荐!这10款不能错过的公益APP,建议收藏

良心推荐!这10款不能错过的公益APP,建议收藏

3. 救援猫 救援猫是一款能够让用户完整的学习到各种安全和救援知识的软件。你可以在平台上找到非常全面的安全知识资料以及救援知识相关资

海岛纪元什么时候出 上线时间一览

海岛纪元什么时候出 上线时间一览

网易海岛纪元v1.0.0类型:角色扮演 大小:687.13MB 评分:5.0 平台: 标签:男生精选战争题材动漫卡通闯关 立即下载 海岛纪元多久上线,海岛纪

时好时坏的成语,形容局势一会好一会坏的成语

时好时坏的成语,形容局势一会好一会坏的成语

好逸恶劳  【拼音】 悲喜交集 [ bēi xǐ jiāo jí ]:交:共。悲伤和喜悦的心情交织在一起。悲喜交加 [ bēi xǐ jiāo jiā ]:悲喜交加是一个词语

黄颡鱼什么时候开口?夜行性鱼类,尤以夏秋季的晚上最好钓!

黄颡鱼什么时候开口?夜行性鱼类,尤以夏秋季的晚上最好钓!

一、鱼种论述 黄颡鱼是名贵淡水经济鱼种,别称黄骨鱼、昂刺鱼、黄辣丁等,在生物分类学上属于鲿科、黄颡鱼属鱼类的统称,全国各地均有分