热门标签 | 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的使用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


推荐阅读
  • 本文介绍如何在Linux服务器之间使用SCP命令进行文件传输。SCP(Secure Copy Protocol)是一种基于SSH的安全文件传输协议,支持从远程机器复制文件到本地服务器或反之。示例包括从192.168.45.147复制tomcat目录到本地/home路径。 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
  • 本文介绍了如何在Python中使用join()方法将列表中的元素连接成一个字符串。join()方法允许用户指定分隔符,从而灵活地生成所需格式的字符串。此外,我们还将探讨一些实际应用中的注意事项和技巧。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • PHP 时间与日期工具类:星座、干支、生肖的实现
    本文介绍了一个PHP时间与日期工具类,涵盖了时区设置、有效日期和时间检查、星座、干支、生肖计算等功能。该工具类特别适用于需要处理中国农历及西方星座的应用场景。 ... [详细]
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社区 版权所有