如何编码Java Cookie对象的实际值?我不能传递'='之类的字符或US-ASCII之外的任何字符。
/ br joynes
答案 0 :(得分:8)
这并不重要,但通常Base64应该运作良好。
这听起来像是要在cookie中存储任意设置。这通常不是一个好主意,因为cookie(像所有客户端输入一样)是不可信的。考虑将数据服务器端存储在某个生成的(随机!)标识符下,并将其放入cookie中。这样人们就无法绕过访问限制或通过操纵的cookie将任意数据注入您的系统。
如果您无法使用此方法,请将Cookie值视为不受信任的输入,并照常验证。
修改强>
Base64不合适,因为它使用“=”,Java cookie不支持。而是使用
java.net.URLEncoder.encode
仅使用适合Cookie的字符。
答案 1 :(得分:5)
如果您有不安全的字符,请使用十六进制或URL安全版本的Base64对其进行编码。常规Base64不能用作cookie值。较旧的Tomcat用于允许非法字符,如“=”,但较新的版本现在开始强制执行cookie规则。
答案 2 :(得分:3)
我最终使用没有填充的Base64编码。这意味着省略了尾随等号,因此问题得以解决。
创建无填充的Base64编码器java.util.Base64.getEncoder().withoutPadding()
创建无填充Base64解码器java.util.Base64.getDecoder()
答案 3 :(得分:-2)
据我了解你需要类似这样的字符串名称=“Женя”; Cookie cookie = new Cookie(“name”,new String(name.getBytes(“cp1251”),“utf8”)); response.addCookie(饼干);
答案 4 :(得分:-4)
我的php cookie值编码功能:
<?
function encode_cookie_value($value)
{return strtr($value,
array_combine(str_split($tmp=",; \t\r\n\013\014"),
array_map('rawurlencode', str_split($tmp))
)
);
}
setrawcookie('kk', encode_cookie_value('jk=jk?jk-/":jk;jk jk,jk'));
?>