Cookie Version in J2EE

Cookie Version in J2EE

原文章:http://villadora.me/2014/05/06/cookie-version/

在处理Cookie的时候发现不能处理servlet request中不能获取cookie中的带”:”字符的值.


Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (StringUtils.equalsIgnoreCase(cookie.getName(), name)) {
value = cookie.getValue(); // if the value in cookie is ‘http://example.com‘ then here it will get ‘http‘
break;
}
}
}

这是因为目前Cookie有两个标准,一个是Version 0 (Netscape spec)

而J2EE的实现描述 Cookie#setValue 中





1
2
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.
`

也就是说Version 0 是不能包含空格,括弧,等号,逗号, 双引号等字符的。

而Version 1 (RFC
2109 spec
) 是可以的。

但是javax.servlet.http.Cookie的实现时默认是使用 Version 0





1
2
By default, cookies are created according to the Netscape cookie specification. The version can be changed with the
setVersion method.

而看起来container默认的选择也是使用了Version
0而没有去改变version。所以当Cookie值中带有’:’时,就无法读到colon后的内容。

如果没有办法改container并且只能使用默认的request的话,暂时的解决方案是在写cookie的时候URLEncode,
然后在服务器端读的时候做URLDecode

Cookie Version in J2EE,布布扣,bubuko.com

时间: 2024-10-18 15:52:43

Cookie Version in J2EE的相关文章

Check Kernel version of J2EE Engine

Two types of the kernel are in SAP NetWeaver Java system: Native Kernel Java Kernel Native Kernel: Native Kernel is executables of java startup framework which are written in C-code, like jcontrol, jstart, jlaunch, sapstartsrv etc. We can update usin

Session 与 Cookie

Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们本身只是HTTP中的一个配置项,在servlet规范中也只对应一个类而已. 理解 Cookie 通俗地说就是当一个用户通过 HTTP 协议访问一个服务器的时候,这个服务器会将一些 Key/Value 键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器的时候,数据又被完整地带回给服务器.W3C 在设计 Cookie 时实际上考虑的是为了记录用户在一段时间内访问 Web

创建Cookie抛出异常:java.lang.IllegalArgumentException: Control character in cookie value

调用Cookie对象的构造函数可以创建Cookie.Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值.   名字和值都不能包含空白字符以及下列字符:[ ] ( ) < > = , " / ? @ : ; 错误出在response.addCookie(cookie)://cookie 是一个Cookie实例. J2EE Doc里面的,cookies只支持ASCII字符,而且不能有逗号,分号,空白.或者以$开头.名字在创建后不能改变.如果要存储中文的,先用UR

JavaScript 客户端JavaScript之cookie和客户端持久性

Document对象都有一个cookie属性,它使得JavaScript代码能够在用户的硬盘上持久地存储数据, 并且能够获取以这种方式存储的数据.客户端持久性是赋予WEB应用程序记忆力的一种简单方法. cookie还可以用于客户端脚本化,并且是HTTP协议的一个标准扩展. cookie的字符串由  名字/值 组成 (=区分),不同的属性之间用分号隔开. cookie有4个可选属性 1.expires(已被max-age取代)  生存期 expires是未来的一个过期日期,max-age用秒来设置

JavaSe:Cookie 管理的API介绍

CookieManager 在使用HttpURLConnection中,并没有关于Cookie的管理.如果使用Java程序时,怎么管理cookie呢? Cookie案例 1. User Agent -> Server POST /acme/login HTTP/1.1 [form data] 2. Server -> User Agent HTTP/1.1 200 OK Set-Cookie2: Customer="WILE_E_COYOTE"; Version="

【读书笔记--cookie】JavaScript权威指南 第六版

遇到一些问题需要用cookie处理,正好读了一下犀牛书关于cookie的介绍,整理了一些笔记. cookie是指web浏览器存储的少量数据,同时它是与具体的web页面或者站点相关的. cookie数据会自动在web浏览器和web服务器之间传输,因此服务器端脚本就可以读.写存储在客户端的cookie值.在JavaScript中,cookie用于保存状态以及能够为web浏览器提供一种身份识别机制. 但是在JavaScript中使用cookie不会采用任何加密机制,因此它们是不安全的.但是,通过htt

IOS - 打印COOKIE

?NSHTTPCookie 在iOS中使用NSHTTPCookie类封装一条cookie,通过NSHTTPCookie的方法读取到cookie的通用属性. - (NSUInteger)version; - (NSString *)name; - (NSString *)value; - (NSString *)domain; - (NSString *)path; - (BOOL)isSessionOnly; 现在,我们需要读取cookie字段中的CRFS-TOKEN字段, NSHTTPCook

Java Cookie详解

Cookie 的作用我想大家都知道,通俗地说就是当一个用户通过 HTTP 协议访问一个服务器的时候,这个服务器会将一些 Key/Value 键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器的时候,数据又被完整地带回给服务器. 当前 Cookie 有两个版本:响应头的标识分别是 “Set-Cookie”和“Set-Cookie2”.Cookies版本0(有时被称为Netscape Cookies)和Cookies版本1(RFC2965). Versio

160428、JavaScript知识总结—cookie及其应用

一.cookie基本介绍 cookie是document的对象.cookie可以使得JavaScript代码能够在用户的硬盘上持久地存储数据,并且能够获得以这种方式存储的数据.cookie还可以用于客户端脚本化. cookie数据可以自动地在Web浏览器好Web服务器之间传递. 在浏览器中可以通过navigator.cookieEnabled属性检查浏览器的cookie功能是否被激活. 二.cookie的基本属性 每个cookie都有四个可选的属性 1.expires 指定了cookie的生存期