编码java Cookie值

您应该如何编码Java Cookie对象的实际值? 我不能传递像’=’这样的字符或US-ASCII之外的任何字符。

/ Br joynes

它并不重要,但通常Base64应该运行良好。

警示:

这听起来像是要在cookie中存储任意设置。 这通常不是一个好主意,因为cookie(像所有客户端输入一样)是不可信的。 考虑将数据服务器端存储在某个生成的(随机!)标识符下,并将其放入cookie中。 这样人们就无法规避访问限制或通过操纵的cookie将任意数据注入您的系统。

如果您无法使用此方法,请将cookie值视为不受信任的输入,并照常validation。

编辑:

Base64不合适,因为它使用“=”,Java cookie不支持。 而是使用

java.net.URLEncoder.encode 

只使用适合cookie的字符。

如果您有不安全的字符,请使用hex或URL安全版本的Base64对其进行编码。 常规Base64不能用作cookie值。 较旧的Tomcat用于允许非法字符,如“=”,但较新的版本现在开始强制执行cookie规则。

我最终使用没有填充的Base64编码。 这意味着省略了尾随等号,因此问题得以解决。

创建一个无填充的Base64编码器java.util.Base64.getEncoder().withoutPadding()

创建一个无填充的Base64解码器java.util.Base64.getDecoder()

据我所知你需要这样的字符串名称=“Женя”; Cookie cookie = new Cookie(“name”,new String(name.getBytes(“cp1251”),“utf8”)); response.addCookie(cookie);

我的php cookie值编码function: