Java是如何读取和写入浏览器Cookies的

2023-11-18

首先我们认识下什么是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<String, Cookie> 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<String, Cookie> ReadCookieMap(HttpServletRequest request) {
        Map<String, Cookie> cookieMap = new HashMap<String, Cookie>();
        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      * <p>删除无效cookie</p>
 3      * <p>无效☞1.过时 2.未发布</p>
 4      * @param request
 5      * @param response
 6      * @param list
 7      */
 8     private void delectCookieByName(HttpServletRequest request, HttpServletResponse response,String deleteKey) throws NullPointerException {
12         Map<String, Cookie> 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必须同时具备时间和路径的参数不然部分浏览器删除不了

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java是如何读取和写入浏览器Cookies的 的相关文章

随机推荐

  • 我的

    CangLongHead22E5229DEF23ED8E0BF2C55E698486BD0D1C555F1275F5D8BD6553F4A1FEF5EA623255CE7EA69C4D729AA0D76938EF3346260603DB47
  • 两层板PCB如何设计的?

    两层板PCB如何设计的 三层板的PCB又是如何设计的 https blog csdn net qq 42053636 article details 89577815 来自专治PCB疑难杂症总群 四大群群友突破1800人啦 添加杨老师微信号
  • 安卓应用开发入门!Android高级工程师系列学习路线介绍,灵魂拷问

    从基础到架构进阶 包含了腾讯 百度 小米 阿里 乐视 美团 58 猎豹 360 新浪 搜狐等一线互联网公司面试被问到的题目 涵盖了初中高级安卓技术点 文章中所列主要为大纲部分 详细内容可以在文末自行获取哈 如果你熟练掌握本文中列出的知识点
  • Qt 笔记4--Qt 读写CSV

    Qt 笔记4 Qt 读写CSV CSV Comma Separated Values 即逗号分隔值 有时也称为字符分隔值 因为分隔字符也可以不是逗号 其文件以纯文本形式存储表格数据 CSV是一种通用的 相对简单的文件格式 被用户 商业和科学
  • 1067:整数的个数(C C++)

    题目描述 给定k 1
  • 【八股】2023秋招八股复习笔记1(CSBase+部分WXG题)

    文章目录 MYSQL redis 网络 系统 安全 C 招聘要求 x3 部分面经和题目 WXG 后端 x5 MYSQL redis redis memcached mysql 线程模型 6 0多线程 持久化 AOF RDB 功能 过期删除
  • aspx页面添加引用代码

  • Windows远程桌面连接报内部错误

    远程桌面连接出现了内部错误解决方法 1 运行里输入ncpa cpl命令 打开网络连接 2 禁用 启用一下 当前的网卡 3 再通过命令 mstsc 打开远程桌面服务 报错问题解决
  • 基于LabVIEW的音频信号采集分析系统

    本设计基于LabVIEW虚拟仪器开发软件 用PC的声卡与外接麦克风组合采集到外界的声音信息 并保存到WAV文件中 再利用LabVIEW软件进行编程来对采集到的信号进行分析处理 能够显示采集到的波形 滤波后的波形以及其幅度 相位谱和功率谱波形
  • 一个简单的基于epoll的web server

    一个简单的基于epoll的web server 性能还不错我根据一个epoll的模型改了一个http server出来 只有129行 还可以精简不少 呵呵 小测了一下 一秒钟处理了一万了请求 当然这里只是把现成的东西输出 没考虑到发送数据处
  • Qt多国语言动态切换(含源代码)

    Qt中文国际化 含高阶做法 作者 melon 日期 2019 7 15 1 国际化需要用到的工具 lrelease exe lupdate exe linguist exe 非必须 这些工具在Qt5 12 2的bin文件夹都可以找到 lup
  • Hibernate用法:查询,更新,删除!

    一 基本数据查询 使用Hibernate进行数据查询是一件简单的事 Java程序设计人员可以使用对象操作的方式来进行数据查询 查询时使用一种类似SQL的HQL Hibernate Query Language 来设定查询的条件 与SQL不同
  • Redis工具类

    public class RdsUtils Resource private static RedisTemplate redisTemplate 设置键值对 param key 键 param value 值 return public
  • Word中批量更新域的两个小方法

    如果只有一个需要更新 对着域右键选择 更新域 即可 很多需要更新的时候 可以如下操作 两种方法应该都可以 1 选择 打印预览 可以更新文档中的所有MOS认证的老师教的 2 CTRL A 全选 然后F9 更新 即可 自己觉得很好用的 批批更新
  • C#密码复杂性校验(二)

    以下是一个使用正则表达式进行密码复杂性校验的示例代码 using System using System Text RegularExpressions class Program static void Main string args
  • 《Unity Shader入门精要》彩图版免费分享~~~~~

    这书很多地方都要币或者要钱 这里就免费分享了 下面是网盘链接 顺手点个赞或者评论一波呗 下载链接 链接 https pan baidu com s 137Y1nkB6h8HIvKOfwFPnbQ 提取码 f8dw 顺手点个赞 蟹蟹蟹蟹
  • 测试人社区——软件测试技术沙龙分享

    作为软件开发领域中至关重要的一环 软件测试的重要性日益凸显 然而 随着软件测试开发技术的不断发展 软件测试也面临着越来越多的挑战 为了更好地应对这些挑战 测试人社区于2023年3月12日举办了技术沙龙 主题为 探索软件测试前沿技术及最佳实践
  • C++实现UDP可靠传输(一)

    声明 禁止以任何形式转载本文章 本文章仅供个人学习记录与交流探讨 文章中提供的思路只是一种解决方案 代码也并非完整代码 如有需要 请自行设计协议并完成编程任务 食用本文章之前 推荐阅读 C 实现流式socket聊天程序 目录 UDP协议的基
  • TypeError: super(type, obj): obj must be an instance or subtype of type 该错误的一次处理

    我在写maya类的时候遇到 版本python2 7 folder lib mayaclass py base类 A base 类 ui py 其中A继承base ui py文件中内容 python2 7 import imp from fo
  • Java是如何读取和写入浏览器Cookies的

    首先我们认识下什么是cookies cookie实际上是一个存在你硬盘里的数据 但是这些数据很特殊 只能由web应用提交给浏览器帮助存储 并且我们还能读取浏览器存在本地的cookie web应用一般只在cookie中存储一些用户信息等少量且