PHP中的Base64编码/解码

3

我在我的网站中实现了一种cookie机制。我想要存储的所有cookie都在一个数组中,包括它们的TTL、值和名称等信息。

当我想要设置cookie时,我会序列化数组,然后进行gzip压缩,最后进行base64编码。

base64_encode(gzcompress(serialize($array)))

我的问题是有时候,当我使用cookie时,会出现以下错误:

$_COOKIE[name]

base64编码字符串中所有字符都是小写的。

所以我的问题是: - 所有字符是否都可以是小写格式(base64编码)

或者我做错了什么,但问题并不总是出现,我无法复现这个错误。


1
你可以在解析cookie之前不使用 strtolower 吗? - TheBlackBenzKid
2
base64_decode函数不能给你正确的压缩数据吗? - Pranav Hosangadi
请问您能否展示完整的代码?包括数据准备、保存和恢复的过程。 - newman
离题了,但是你将多少数据放入cookie中?请记住,每个请求/响应之间在浏览器和服务器之间传输完整的cookie内容。如果您有一个大的cookie字符串,并且您的站点进行了多个请求,这可能会对性能产生明显的影响。如果是这种情况,您可能会发现$_SESSION更适合存储它(这也很方便地消除了所有序列化和编码的需要)。 - Spudley
1个回答

6
是的,Base64编码字符串可以全部小写。这种情况发生的概率(对于随机输入数据,压缩数据可以很好地近似)约为(36/64)4N/3,其中N是输入字节长度,4N/3是输出的近似长度(不包括填充)。
恰巧,(36/64)4 ≈ 0.100113非常接近1/10,因此,对于每四个字符的长度,随机Base64字符串不包含大写字母的概率下降了10倍。
例如,一个随机的8字符Base64字符串(对应于随机的6字节输入)大约有1%的可能不包含大写字母,而相应的随机12字符Base64字符串(对应于随机的9字节输入)的概率约为0.1%,依此类推。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接