编码java Cookie值

时间:2009-10-07 13:45:33

标签: java encoding cookies

如何编码Java Cookie对象的实际值?我不能传递'='之类的字符或US-ASCII之外的任何字符。

/ br joynes

5 个答案:

答案 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'));
?>