`
blueswind8306
  • 浏览: 124604 次
  • 来自: ...
社区版块
存档分类
最新评论

在Cookie中存储二进制数据的方法

阅读更多
项目中需要将压缩后的二进制数据存入cookie的value中。如果直接将二进制数据存入是不行的,因为cookie规范中规定了一些字符不允许存入:
引用

With Version 0 cookies, values should not contain white space, brackets, parentheses, equals signs, commas, double quotes, slashes, question marks, at signs, colons, and semicolons. Empty values may not behave the same way on all browsers.

对于二进制数据,无法(也不应该)控制数据内容。所以在写入和读出cookie数据前后,应该先经过编解码过程,将二进制数据编码存储。

比较通用的做法是进行BASE64编码,但是当原始数据长度不能被3整除时,BASE64会在结尾处补1~2个等号,而等号在cookie规范中是不允许出现的,这里是问题说明:
http://stackoverflow.com/questions/2090009/what-text-encoding-scheme-do-you-use-when-you-have-binary-data-that-you-need-to/2090066#2090066

所以可以选用某种BASE64的变种,它将BASE64中定义的'+','/','='转换为其它不会造成分隔符污染的字符:
http://en.wikipedia.org/wiki/Base64#URL_applications

这里我使用对于URL友好的一种BASE64编码UrlBase64Encoder,以下是这个包的maven依赖声明:
引用

<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>

分享到:
评论

相关推荐

    Barberry:具有缓存功能的二进制内容存储和转换服务

    每个Web项目都具有不同的二进制数据来托管和处理:图像,PDF等。在大多数情况下,这些文件应以不同的方式转换: 图片:调整大小和格式 PDF到图像 打开Office模板以获取MS Office文档和PDF 解决方案 该应用程序可以...

    IndexedDB增删改查插件,分别对增删改查进行了封装,调用对应的函数即可

    IndexedDB 是一种底层 API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型对象(blobs))。该 API 使用索引实现对数据的高性能搜索。虽然 Web Storage 在存储较少量的数据很有用,但对于存储更大量的...

    java-servlet-api.doc

    Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。 在初始化过程中,javax.servlet.Servlet接口的init()...

    Python Cookbook

    2.12 将二进制数据发送到Windows的标准输出 77 2.13 使用C++的类iostream语法 78 2.14 回退输入文件到起点 80 2.15 用类文件对象适配真实文件对象 83 2.16 遍历目录树 84 2.17 在目录树中改变文件扩展名 85 ...

    C#编程经验技巧宝典

    98 &lt;br&gt;0153 如何自定义数字小数点左边分组位数 98 &lt;br&gt;0154 格式化输入数据为货币格式 99 &lt;br&gt;0155 如何计算两个整数的乘积 99 &lt;br&gt;0156 如何将二进制数转换为十进制数 100 &lt;br&gt;0157 如何...

    java jdk实列宝典 光盘源代码

    读写二进制数据,BinaryData.java; 读写Blob数据,blob数据常以二进制形式存储比较大的文件数据,如图片、视频文件等,本文介绍如何往数据库中读写blob数据,BlobData.java; 使用ResultSet更新数据库,...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例223 以二进制形式上传文件到数据库 285 实例224 上传文件到服务器 287 实例225 限制上传文件的大小 288 实例226 限制上传文件的类型 291 实例227 上传多个文件到服务器 292 4.2 文件下载 294 实例228 通过链接...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例223 以二进制形式上传文件到数据库 285 实例224 上传文件到服务器 287 实例225 限制上传文件的大小 288 实例226 限制上传文件的类型 291 实例227 上传多个文件到服务器 292 4.2 文件下载 294 实例228 通过链接...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    Python3-Spider-Practice:Python3 各种爬虫实战练习,Python 3 practice of various spiders

    我的博客:、实战专栏:、基础训练: 【requests、lxml、Xpath、CSV】 【requests、lxml、Xpath、正则表达式、CSV、二进制数据储存】 【requests、Beautiful Soup、CSV、列表操作、分页判断】 【requests、Beautiful...

    PHP程序开发范例宝典III

    实例035 在下拉菜单中显示数据表某列的字段值 50 实例036 在下拉菜单中显示数组中的元素 51 实例037 级联菜单的应用 52 实例038 修改数据时下拉列表的默认值为数据库中原数据信息 54 实例039 可输入字符的...

    ASP200问.EXE

    76.如何实现在多个表中查询数据 77.如何用ASP实现通用条件查询模块 78.如何在ASP整合SQL语句 79.如何实现不刷新页面筛选数据库中的数据 80.如何实现公共的数据分页模块 82.如何在ADO中调用SQL函数 83.如何调用SQL ...

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    12.2.2 二进制文件 12.2.3 上传文件 12.2.4 使文件对多用户安全 12.2.5 压缩 12.3 序列化 12.4 总结 第13章 LINQ 13.1 LINQ基础 13.1.1 延迟执行 13.1.2 LINQ是如何工作的 13.1.3 LINQ表达式 ...

    ASP.net技术内幕

    14.1.3 对数据库数据执行布尔查询 14.1.4 上传二进制文档并且进行索引 14.2 使用Microsoft Indexing Service 14.2.1 配置Microsoft Indexing Service 14.2.2 将SQL Server配置为使用...

    ASP.NET4高级程序设计(第4版) 3/3

    12.2.2 二进制文件 416 12.2.3 上传文件 417 12.2.4 使文件对多用户安全 419 12.2.5 压缩 423 12.3 序列化 423 12.4 总结 426 第13章 LINQ 427 13.1 LINQ基础 427 13.1.1 延迟执行 429 13.1.2 ...

Global site tag (gtag.js) - Google Analytics