热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

老生常谈java中cookie的使用

下面小编就为大家带来一篇老生常谈java中cookie的使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

1 什么是COOKIE

浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。因此当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。为了弥补这个缺陷,Netscape开发出了COOKIE这个有效的工具来保存某个用户的识别信息,因此人们昵称为“小甜饼”。COOKIEs是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为COOKIEs.txt本地文件保存从所有站点接收的COOKIE信息;而IE浏览器把COOKIE信息保存在类似于C:\windows\COOKIEs的目录下。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的COOKIE信息,来识别这个用户。

2 COOKIE的四个属性

max-age   指定CCOOKIE的生存周期(以秒为单位)!默认情况下,COOKIE的值只在浏览器的会话期间存在,当用户退出浏览器这些值就消失了!

path   指定与COOKIE关联在一起的网页.默认情况下,COOKIE会和创建它的网页以及与这个网页处于同一个目录下的网页和处于该目录下的子目录关联。

domain   设置访问域   举个例子:位于order.example.com的服务器要读取catalog.example.com设置的COOKIE.这里就要引入domain属性,假定由位于catalog.example.com的页面创  的COOKIE把自己的path属性设置为"/",把domain属性设置为".example.com",那么所有位于"catalog.example.com"的网页和所有位于"orders.example.com"的网页以及所有位于example.com域的其他服务器上得网页都能够访问这个COOKIE.如果没有设置COOKIE的domain值,该属性的默认值就是创建COOKIE的网页所在的  服务器的主机名。   注意:不能将一个COOKIE的域设置成服务器所在的域之外的域.

seure   指定在网络上如何传输COOKIE的值

3 java COOKIE操作

创建COOKIE

// new一个COOKIE对象,键值对为参数 
COOKIE COOKIE = new COOKIE("key", "COOKIE的value值"); 
   如果COOKIE的值中含有中文时,需要对COOKIE进行编码,不然会产生乱码,使用
      URLEncoder.encode("COOKIE的value值","utf-8");


// 设置COOKIE最大生存时间,以秒为单位,负数的话为浏览器进程,关闭浏览器COOKIE消失 
COOKIE.setMaxAge(*24*60*60); // 一天 
// 将COOKIE添加到Response中,使之生效 
response.addCOOKIE(COOKIE); //addCOOKIE后,如果已经存在相同名字的COOKIE,则最新的覆盖旧的COOKIE

注意:在Struts中可以使用 ServletActionContext.getResponse()获得respone对象

读取COOKIE

读取COOKIE只能从request中获取全部COOKIE,然后循环迭代。

在Struts中可以使用 ServletActionContext.getRequest()获得request对象

// 从request中获取COOKIE,拿到的是一个COOKIE数组 
COOKIE[] COOKIEs = request.getCOOKIEs(); 
// 然后迭代之 
if (COOKIEs != null && COOKIEs.length > 0) { //如果没有设置过COOKIE会返回null 
  for (COOKIE COOKIE : COOKIEs) {...} 
}

删除COOKIE

删除COOKIE的话,只需要将COOKIE的生存期设为0即可

COOKIE[] COOKIEs = request.getCOOKIEs(); 
if (COOKIEs != null && COOKIEs.length > 0) { 
  for (COOKIE COOKIE : COOKIEs) { 
    String name = COOKIE.getName(); 
    // 找到需要删除的COOKIE 
    if (name.compareTo("target-key") == 0) { 
      // 设置生存期为0 
      COOKIE.setMaxAge(0); 
      // 设回Response中生效 
      response.addCOOKIE(COOKIE); 
    } 
  } 
} 

4 COOKIE的setPath方法使用:

正常的COOKIE只能在一个应用中共享,即一个COOKIE只能由创建它的应用获得。

1.可在同一应用服务器内共享方法:设置COOKIE.setPath("/");

本机tomcat/webapp下面有两个应用:webapp_a和webapp_b,

1)原来在webapp_a下面设置的COOKIE,在webapp_b下面获取不到,path默认是产生COOKIE的应用的路径。

2)若在webapp_a下面设置COOKIE的时候,增加一条COOKIE.setPath("/");或者COOKIE.setPath("/webapp_b/");

就可以在webapp_b下面获取到cas设置的COOKIE了。

3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此COOKIE.setPath("/");之后,可以在webapp文件夹下的所有应用共享COOKIE,而COOKIE.setPath("/webapp_b/");

是指cas应用设置的COOKIE只能在webapp_b应用下的获得,即便是产生这个COOKIE的webapp_a应用也不可以。

4)设置COOKIE.setPath("/webapp_b/jsp")或者COOKIE.setPath("/webapp_b/jsp/")的时候,只有在webapp_b/jsp下面可以获得COOKIE,在webapp_b下面但是在jsp文件夹外的都不能获得COOKIE。

5)设置COOKIE.setPath("/webapp_b");,是指在webapp_b下面才可以使用COOKIE,这样就不可以在产生COOKIE的应用webapp_a下面获取COOKIE了

6)有多条COOKIE.setPath("XXX");语句的时候,起作用的以最后一条为准。

5 COOKIE.setDomain方法设计跨域共享

A机所在的域:home.langchao.com,A有应用webapp_a

B机所在的域:jszx.com,B有应用webapp_b

1)在webapp_a下面设置COOKIE的时候,增加COOKIE.setDomain(".jszx.com");,这样在webapp_b下面就可以取到COOKIE。

2)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取webapp_a在客户端设置的COOKIE,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得COOKIE。

3)设置了COOKIE.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享

以上这篇老生常谈java中COOKIE的使用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文总结了淘淘商城项目的功能和架构,并介绍了传统架构中遇到的session共享问题及解决方法。淘淘商城是一个综合性的B2C平台,类似京东商城、天猫商城,会员可以在商城浏览商品、下订单,管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。商城的架构包括后台管理系统、前台系统、会员系统、订单系统、搜索系统和单点登录系统。在传统架构中,可以采用tomcat集群解决并发量高的问题,但由于session共享的限制,集群数量有限。本文探讨了如何解决session共享的问题。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
author-avatar
弋弋弋丶妗妗_126
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有