热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Servlet(cookie的生存时间与请求路径)

cookie的生存时间问题默认情况下,浏览器会将cookie保存在内存里面。只要浏览器不关闭,cookie就会一直保存,浏览器一关闭,cookie就会被删除。设置cookie的生存时间:public

COOKIE的生存时间问题

  • 默认情况下,浏览器会将COOKIE保存在内存里面。只要浏览器不关闭,COOKIE就会一直保存,浏览器一关闭,COOKIE就会被删除。
  • 设置COOKIE的生存时间:
public void setMaxAge(int expiry)
Sets the maximum age of the COOKIE in seconds.
A positive value indicates that the COOKIE will expire after that many seconds have passed. Note that the value is the maximum age when the COOKIE will expire, not the COOKIE's current age.

A negative value means that the COOKIE is not stored persistently and will be deleted when the Web browser exits. A zero value causes the COOKIE to be deleted.
  • expiry(中文意思为过期),单位为秒
  • expiry>0,表示COOKIE的值将在expiry秒后过期;expiry<0(默认值),表示将COOKIE保存在内存中;expiry=0,删除COOKIE;

note:expiry的使用方法,通过将COOKIE的生存周期设为0,即可删除该COOKIE

COOKIE COOKIE = new COOKIE("username", "tom");
COOKIE.setMaxAge(0);
response.addCOOKIE(COOKIE);

COOKIE的路径问题

  • 浏览器访问服务器时,会比较COOKIE的路径是否与要访问的路径匹配,只有路径匹配的COOKIE才会被发送。

什莫意思?

使用一个简单的项目servlet_demo用来测试,在webapps的biz目录下创建一个a.jsp,在页面开头添加代码块,用来向客户端添加COOKIE:

<%
COOKIE COOKIE = new COOKIE("name","tom");
response.addCOOKIE(COOKIE);
%>

启动服务器,部署项目.....

在浏览器中请求http://localhost:8080/servlet_demo/biz/a.jsp,在google浏览器中查看COOKIE,


在这里可以看到我们添加的name和值tom,




解释:只有路径匹配的COOKIE才会被发送

当我们再次访问与上面路径匹配的url时,浏览器会自动将该COOKIE发送到服务器。

验证:

  • 获得客户端发送过来的COOKIE:
COOKIE[] getCOOKIEs()
Returns an array containing all of the COOKIE objects the client sent with this request. This method returns null if no COOKIEs were sent.
Returns:
an array of all the COOKIEs included with this request, or null if the request has no COOKIEs

在biz文件夹中创建文件b.jsp,在开头添加如下代码:

<%
COOKIE[] COOKIEs = request.getCOOKIEs();
for (COOKIE c : COOKIEs){
out.println("

" + c.getName() + ":" + c.getValue() + "

");
}
%>
在浏览器中访问b.jsp页面,http://localhsot:8080/biz/b.jsp,

可以观察到,与我们之前添加进客户端的COOKIE的内容和值相同

  • 将b.jsp文件复制到webapps文件夹下重命名为c.jsp,再次访问c.jsp,http://servlet_demo/c.jsp,我们得到,

只有JSESSIONID,原因就是我们访问http://servlet_demo/c.jsp时对应的路径为/servlet_demo,只与JSESSIONID的路径匹配,因此只返回了JSESSIONID这一个COOKIE。

  • 在biz下创建一个文件夹biz2,将b.xml文件复制到biz2下,重命名为d.xml,我们访问d.jsp,http://servlet_demo/biz/biz2/d.jsp,结果可以自己分析总结了。
  • COOKIE的默认路径

默认等于添加该COOKIE的web组件的路径,例如我们在访问http://localhost:8080/servlet_demo/biz/a.jsp时,在浏览器中添加了一个COOKIE,则该COOKIE的路径就是/servlet_demo/biz

匹配规则:访问的路径的层级如果小于客户端保存的COOKIE的路径的层级,则不能获取深层级的COOKIE;如果请求的路径的层级深于客户端保存的COOKIE的路径的层级,则会获得浅层级和当前层级的所有COOKIE

  • 设置COOKIE的默认的层级
public void setPath(java.lang.String uri)
Specifies a path for the COOKIE to which the client should return the COOKIE.
The COOKIE is visible to all the pages in the directory you specify, and all the pages in that directory's subdirectories.
A COOKIE's path must include the servlet that set the COOKIE, for example, /catalog, which makes the COOKIE visible to all
directories on the server under /catalog.

COOKIE的限制

  • COOKIE可以被用户禁止
  • 只能保存少量的数据(4k左右)
  • 只能保存字符串,对于中文,需要编码
  • 不安全

推荐阅读
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • LeetCode笔记:剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
    本文介绍了LeetCode剑指Offer 41题的解题思路和代码实现,主要涉及了Java中的优先队列和堆排序的知识点。优先队列是Queue接口的实现,可以对其中的元素进行排序,采用小顶堆的方式进行排序。本文还介绍了Java中queue的offer、poll、add、remove、element、peek等方法的区别和用法。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
author-avatar
DREAM2502930781
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有