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

开发笔记:Java是如何读取和写入浏览器Cookies的

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器COOKIEs的相关的知识,希望对你有一定的参考价值。


首先我们认识下什么是COOKIEs:

COOKIE实际上是一个存在你硬盘里的数据,但是这些数据很特殊,只能由web应用提交给浏览器帮助存储,并且我们还能读取浏览器的COOKIE

web应用一般只在COOKIE中存储一些用户信息等少量且暂时的数据,数据量大则不适合存储在COOKIEs

 



 

一般浏览器对于每个web应用会分别给予他们40个COOKIE用来存储数据,并且每个COOKIE的大小不超过4K(听说部分浏览器的COOKIE能存很大的数据,不过我们一般不会存这么大的数据,因为数据提取的效率不高,影响性能)

说了这么多废话,然后重点终于来了

java通过httpServletRequest接口来访问浏览器请求中的COOKIEs数据(这里先了解一下COOKIEs来龙去脉,代码待会一并给出)

每个COOKIE有两个属性:键 ,值(无特定格式字符串,所以可以diy存数据,不过要注意URL编码问题,编码问题待会和代码一同讲)

如果我们需要存储新的COOKIE我们可以new一个COOKIE实例 并通过httpservletRsponse提交到浏览器,进而存储到本地

下面给出COOKIE的一个通用类

 


/*
* 该类可以从浏览器请求中提取出COOKIEs并进行对cookis的相关操作
*
*/
public class COOKIEsUtil extends BaseController {

/**
* 根据名字获取COOKIE
*
*
@param request
*
@param name
* COOKIE名字
*
@return
*/
public static COOKIE getCOOKIEByName(HttpServletRequest request, String name) {
Map
COOKIEMap = ReadCOOKIEMap(request);
if (COOKIEMap.containsKey(name)) {
COOKIE COOKIE
= (COOKIE) COOKIEMap.get(name);
return COOKIE;
}
else {
return null;
}
}
/**
* 将COOKIE封装到Map里面
*
*
@param request
*
@return
*/
private static Map ReadCOOKIEMap(HttpServletRequest request) {
Map
COOKIEMap = new HashMap();
COOKIE[] COOKIEs
= request.getCOOKIEs();
if (null != COOKIEs) {
for (COOKIE COOKIE : COOKIEs) {
COOKIEMap.put(COOKIE.getName(), COOKIE);
}
}
return COOKIEMap;
}
/**
* 保存COOKIEs
*
*
@param response
* servlet请求
*
@param value
* 保存值
*
@author jxf
*/
public static HttpServletResponse setCOOKIE(HttpServletResponse response, String name, String value,int time) {
// new一个COOKIE对象,键值对为参数
COOKIE COOKIE = new COOKIE(name, value);
// tomcat下多应用共享
COOKIE.setPath("/");
// 如果COOKIE的值中含有中文时,需要对COOKIE进行编码,不然会产生乱码
try {
URLEncoder.encode(value,
"utf-8");
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
COOKIE.setMaxAge(time);
// 将COOKIE添加到Response中,使之生效
response.addCOOKIE(COOKIE); // addCOOKIE后,如果已经存在相同名字的COOKIE,则最新的覆盖旧的COOKIE
return response;
}

 

 

 

有了上面的通用类我们可以读取和新建COOKIE了,在这里我还要提一点:新建COOKIE的名字如果浏览器已经存在,则不再重复添加,会覆盖之前的COOKIE

 

浏览器如何查看请求的COOKIE和返回的COOKIE呢?拿Google浏览器举个栗子

技术分享

 

然后就是我们可能需要对COOKIE进行删除操作

 


1 /**
2 *

删除无效COOKIE


3 *

无效?1.过时 2.未发布


4 * @param request
5 * @param response
6 * @param list
7 */
8 private void delectCOOKIEByName(HttpServletRequest request, HttpServletResponse response,String deleteKey) throws NullPointerException {12 Map COOKIEMap = ReadCOOKIEMap(request);17 for (String key : COOKIEMap.keySet()) {
18 if(key==deleteKey && key.equals(deleteKey)) {
19 COOKIE COOKIE = COOKIEMap.get(key);21 COOKIE.setMaxAge(0);//设置COOKIE有效时间为0
22 COOKIE.setPath("/");//不设置存储路径
23 response.addCOOKIE(COOKIE);
24 }
25 }
26 }

 

注意删除COOKIE必须同时具备时间和路径的参数不然部分浏览器删除不了

最后,不得不提一下,写了这么,对你有用就给个赞!!!

 


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 如何使用计算机控制遥控车的步骤和电路制作方法
    本文介绍了使用计算机控制遥控车的步骤和电路制作方法。首先,需要检查发送器的连接器和跳线,以确定命令的传递方式。然后,通过连接跳线和地面,将发送器与电池的负极连接,以实现遥控车的前进。接下来,制作一个简单的电路,使用Arduino命令将连接到跳线的电线接地,从而实现将Arduino命令转化为发送器命令。最后,通过焊接晶体管和电阻,完成电路制作。详细的步骤和材料使用方法将在正文中介绍。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
author-avatar
多伦多打折优惠信息_205
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有