- 通过“Cookie的值在发送cookie时自动URLencoded,并在收到时自动解码”,实际上发生了什么?
这意味着您不必担心特殊字符。
请注意,Cookie不是PHP概念;它们是HTTP协议的扩展。每个协议都有一个严格的结构,你需要遵守,否则它就根本行不通。该结构依赖于分隔符 - 在该协议中分配给它们的字符或具有特殊含义的字符序列。
通过每个协议传输的数据不可避免地会包含这些特殊的通道,这就是为什么编码是必要的。
例如,分号 () 在 Set-Cookie
HTTP 标头中用作分隔符,因此,如果您的 cookie 值包含它,则需要对其进行编码,否则浏览器在收到它时将无法正确解析该 Cookie。;
如果您发送值为 的 Cookie 而不进行编码,浏览器会将其视为带有附加标志的值。
您将作为数据的一部分丢失,并且由于根据协议是未知标志,浏览器将简单地忽略它,因此您甚至根本不知道存在错误。foo;bar
foo
bar
;bar
bar
PHP会在你设置cookie时自动进行编码,然后在你从超全局读取时自动解码它。setcookie()
$_COOKIE
- 为什么需要另一个函数,如 setrawcookie() 当已经有一个函数 setcookie() 可用于设置 cookie 值时?
主要原因有2个:
-
您发送的值可能已被编码。
您希望避免双重编码,因为充其量这意味着您需要做更多的工作。在最坏的情况下,它可能会完全损坏数据(即您可能永远无法100%确定原始数据是什么)。
-
有许多方法可以对值进行编码,并且使用的方法可能不可取。setcookie()
URL 编码通常编码的数据比 Cookie 格式需要的要多。
在极端情况下(您永远不必担心这一点),由于编码数据的大小通常大于原始数据,因此可能会导致其超过最大cookie大小(约4kb)。或者您可能只是想节省带宽。
但是,您100%知道数据不需要编码的情况也并不少见,因此您只想跳过不必要的步骤。
- URL编码和URL解码的过程是否不安全/有害/危险/缓慢/其他任何事情,因此应该避免?
不是一般的,但上面应该已经回答过了。
- 使用over有什么好处/缺点?
setrawcookie()
setcookie()
缺点是,如有必要,您需要自己对值进行编码。
同样,好处已经在上面解释过了。
- 哪一个是安全/更好/安全/可靠/等。 或?
setcookie()
setrawcookie()
setcookie()
为不熟悉cookie协议的人留下更少的错误空间。
但这是有代价的 - 假设你总是想要URL编码。假设在编程中通常是一件坏事。
对于新手来说,更容易使用。
对于专家来说,限制更少,因此更灵活。setcookie()
setrawcookie()
两者本质上都不是更好,而且既然你提到了“安全”,那么两者都不会对安全性产生任何影响。
- 难道不能像其他变量一样设置 Cookie,而不是使用 或 ?
$_COOKIE['cookie_variable'] = 'some_value'
setcookie()
setrawcookie()
不。