你应该如何编码为Java Cookie对象的实际价值? 我无法通过字符,如“=”或任何US-ASCII字符之外。
/溴joynes
你应该如何编码为Java Cookie对象的实际价值? 我无法通过字符,如“=”或任何US-ASCII字符之外。
/溴joynes
它并不真正是怎么回事,但通常的Base64应该很好地工作。
一个警告:
这听起来像你想存储在cookie中的任意设置。 这通常不是一个好主意,因为饼干(像所有的客户端输入)是不可信的。 考虑根据一些生成(随机!)标识符存储数据的服务器端,并把该进入的cookie。 这种方式,人们无法避开访问限制,或通过操纵饼干注入任意数据到系统中。
如果不能使用这种方法,把cookie的值是不可信的输入并确认它像往常一样。
编辑:
Base64是不恰当的,因为它使用“=”,哪个Java饼干不支持。 而是使用
java.net.URLEncoder.encode
仅使用适合于饼干字符。
使用Base64编码的十六进制或URL安全的版本,如果你有不安全的字符进行编码的。 常规的Base64不能作为cookie的值。 较早的Tomcat的使用,以允许在其非法字符喜欢“=”,但新版本现在就开始执行Cookie规则。
我结束了使用Base64编码不填充。 这意味着,尾随等号被省略,这样问题就解决了。
要创建一个无装填料的Base64编码器java.util.Base64.getEncoder().withoutPadding()
创建一个免费的填充-Base64的解码器java.util.Base64.getDecoder()
据我了解,你需要这样的字符串名称= “Женя”;饼干饼干=新的Cookie( “名”,新的String(name.getBytes( “CP1251”), “UTF-8”)); response.addCookie(饼干);
我的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'));
?>