热门标签 | 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模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 标题: ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 请教大家一个javaweb方面的问题·········
    问题问题是这样的,jsp页面统一采用的是GBK的编码格式。web服务器使用的是JBOSS。在如下查询页面中输入中文的查询条件:在点击下一页的时候,要求查询条件也进行回显。但是会出现 ... [详细]
  • 我正在尝试使用scrapycrallsingle运行完美运行的scrapy蜘蛛,但我无法在python脚本中运行它.主要问题是从不执行SingleBlogSpider.parse方 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文总结了解决python文件读写乱码问题的方法。其中包括错误的打开方式和正确的打开方式,并提供了相应的代码示例。建议在进行写入操作后先将文件关闭,然后再打开,最后再读取文件。若文件编码是utf-8,则需要在读取文件时添加decode('utf-8')。这样操作可以避免在打开记事本时出现乱码问题。 ... [详细]
  • 本文详细介绍了Python open()函数的用法,包括文件操作的流程和具体的打开模式。通过该函数,可以打开文件并进行读取、写入等操作。同时,还介绍了文件路径的两种形式和不同的打开模式。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 电脑f5键是什么作用
    常见问题f5常见问题韩亚整形医院源码,vscode写前端代码,ubuntu低配,tomcat下载路径乱码,爬虫_gscu,php精粹pdf,广州快速seo优化排名,aspwap网站 ... [详细]
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社区 版权所有