系统中有一些值使用BASE64编码后存储在COOKIE中,当编码后的字符串最后有一个或者两个等号(=)时,使用Request.getCookies().getValue()会丢失等号,再BASE64解码时产生错误.
https://issues.apache.org/bugzilla/show_bug.cgi?id=44679,可以看到这个链接里面的讨论.
里面提到:
org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUALS_IN_VALUE
system property
that was introduced in Tomcat 6.0.24. Looks like Mark has seen the light. :)
I just wanted to update this issue so everyone that needs this feature is aware
of it.
处理方法:
1) 直接从Http Head里面取Cookie的值,然后自己解析,保留value中的等号.(Cookie值的格式: name=value;name2=value2;name3=value3
2) Base64解码前,计算长度,补充等号后再解码
public static String decodeBase64(String s) {
switch(s.length()%4) {
case 3:
s+= "==="; break; // 注:其实只需要补充一个或者两个等号,不存在补充三个等号的情况
case 2:
s+= "=="; break;
case 1:
s+= "="; break;
default:
}
return new BASE64Encoder().decode(s.getBytes())););
}
public static String encodeBase64(String s) {
String encoded = BASE64Encoder().encode(s.getBytes())));
return encoded.replaceAll("[\n=]", "");
}
备注:
Cookie规范介绍
分享到:
相关推荐
3. 使用`decodeURIComponent`解码键和值,注意值可能包含多个等号,需要正确处理。例如: ```javascript function getCookie(name) { var cookies = document.cookie.split(';'); for (var i = 0; i ; i++) { ...
如果值中包含这些特殊字符或中文,可以使用`escape()`函数编码,取值时使用`unescape()`解码。例如: ```javascript document.cookie = "str=" + escape("I love ajax"); // 实际存储的值为:str=I%20love%20ajax `...
以下是一个简单的函数,用于从`document.cookie`中提取特定key的Cookie值: ```javascript function getCookieValue(key) { const cookies = document.cookie.split(';'); for (let i = 0; i ; i++) { let ...
总结来说,C#中基于WebBrowser控件获取cookie的实现主要包括以下几个步骤: 1. 初始化WebBrowser控件,并添加`DocumentCompleted`事件处理器。 2. 当页面加载完成后,调用`GetCookiesFromWebBrowser`方法。 3. 在`...
- `escape()`:此方法用于对字符串进行URL编码,确保Cookie值中的特殊字符能安全地存储。在设置Cookie时,应对值进行`escape()`处理,避免包含URL中不允许的字符。 - `unescape()`:与`escape()`相反,用于解码URL...
这个函数会返回与给定名称匹配的Cookie值,如果找不到对应名称的Cookie,将返回null。 三、更新Cookie 更新Cookie实际上是先删除旧的Cookie,然后创建一个同名的新Cookie。这是因为`document.cookie`不支持直接修改...
每个Cookie通常包含一个名字、值、过期时间、路径和域等属性。JavaScript通过`document.cookie`属性与Cookie进行交互,但需要注意的是,这个属性是一个字符串,而非对象,因此操作起来有一些特殊。 ### 二、...
由于可能包含多个cookie,因此需要解析这个字符串以获取特定的cookie值。 ```javascript function getCookie(name) { var cookieArr = document.cookie.split(";"); for (var i = 0; i ; i++) { var ...
由于Cookie的值不能包含某些特殊字符(如分号、逗号、等号和空格),在存储可能包含这些字符的数据时,需要使用`escape()`函数进行编码。同样,读取Cookie后,应使用`unescape()`函数进行解码。 3. **Cookie属性**...
5. **示例代码**:以下是一个简单的JavaScript函数,用于获取指定名称的Cookie值: ```javascript function getCookie(name) { var cookieArr = document.cookie.split(";"); for (var i = 0; i ; i++) { var ...
由于 Cookie 的名和值中不允许使用某些特殊字符,如分号、逗号、等号及空格,因此需要使用 `escape()` 函数对这些字符进行编码。例如: ```javascript // 存储包含空格的 Cookie 值 document.cookie = "message=" +...
在JavaScript中封装cookie工具函数,通常需要实现以下几个核心功能:获取全部的cookie值、设置新的cookie、获取特定cookie的值、删除一个cookie以及检查特定的cookie是否存在。通过函数封装,可以简化cookie的操作,...
本示例主要关注JavaScript中的Cookie操作,包括读取和写入Cookie,这对于登录和首页访问的判断至关重要。 一、Cookie的基本概念 Cookie是由服务器端创建并发送到客户端(浏览器)的一小段文本信息,存储在用户的...
- 创建一个键值对字符串,键和值之间用等号分隔。 - 如果有其他属性(如过期时间、路径、域等),则以分号加空格作为分隔符添加到字符串后面。 - 将这个字符串赋值给`document.cookie`。 示例代码如下: ```...
此外,`decodeURIComponent`用于解码Cookie值,因为它们在存储时可能经过URL编码。 在实际应用中,可能还需要处理其他情况,比如Cookie过期、多个同名Cookie(某些浏览器允许)等。但是,上述代码提供了一个基本的...
本例中的知识点还包括了如何使用正则表达式来解析cookie值。正则表达式是用于匹配字符串中字符组合的一种表达式,可以用来识别具有特定模式的字符串。这里,正则表达式被用来从document.cookie字符串中提取与指定主...
因此,如果想要获取特定名称的Cookie值,就需要对这个字符串进行解析。一种常用的方法是: ```javascript function getCookie(key) { var arr1 = document.cookie.split(';'); // 将整个Cookie字符串按分号分割...
另外,通常情况下,没有必要对cookie数据进行urlencode编码,但如果不进行编码的话,确保cookie的值不包含URL中不合法的字符,否则可能导致请求无法正确发送或者接收方无法解析cookie数据。例如,当我们设置cookie为...
由于可能有多个Cookie,我们需要根据分号和等号分割,找到对应的Cookie并解析其值。 ```javascript function getCookie(name) { var cookies = document.cookie.split(';'); for (var i = 0; i ; i++) { var ...
通过以上知识点的详细解释,可以看出JS操作Cookie的写入和读取主要涉及对document.cookie字符串的处理,包括拼接字符串设置Cookie值,以及解析字符串获取特定Cookie的值。掌握了这些方法之后,可以更有效地在Web开发...