- 什么实际的手段几乎发生“的cookie的值发送cookie时会自动url编码,并自动在接收到的解码”?
这意味着你不必担心特殊字符。
请注意,cookie不是PHP的概念;它们是HTTP协议的扩展。而且每个协议都有一个你需要遵守的严格结构,否则它就无法工作。该结构依赖于分隔符 - 在该协议中赋予它们特殊含义的字符或字符序列。
通过每个协议传输的数据将不可避免地包含这些特殊字符,这就是为什么编码是必要的。
例如,分号(;
)用作Set-Cookie
HTTP Header中的分隔符,因此如果您的cookie值包含它,则需要对其进行编码或以其他方式在浏览器收到Cookie时不会正确解析Cookie 。
如果您发送与foo;bar
值的饼干,没有编码,浏览器将连接到它bar
标志把它当作值foo
。
作为数据的一部分,您将丢失;bar
,并且由于bar
根据协议是未知标志,因此浏览器会简单地忽略它,因此您甚至不会知道有错误。
当您将cookie设置为setcookie()
时,PHP将自动执行编码,然后在您从超文本对话框$_COOKIE
中读取时自动对其进行解码。
- 为什么有必要像setrawcookie另一个函数的时已经有一个函数setcookie()函数可用于设置该cookie的值()?
主要有2个原因:
您发送的值可以已经进行编码。
你想避免双重编码,因为充其量意味着你需要做更多的工作。在最糟糕的情况下,它可能会完全破坏数据(即您可能永远不会100%确定原始数据是什么)。
有很多方法可以对值进行编码,并且一个setcookie()
使用可能不合意。
URL编码通常会编码比cookie格式所需的数据更多的数据。
在极端情况下(您不应该担心这一点),因为编码数据的大小通常比原始大,所以它可能会导致它超过最大cookie大小(大约4kb)。或者您可能只是想节省带宽。
但是,您也知道100%数据不需要编码,因此您只是想跳过这一不必要的步骤。
- 是这样它应当避免URL编码和URL的解码不安全的/有害的/有害/慢/别的过程?
不一般,但这应该已经在上面回答了。
- 什么是使用
setrawcookie()
超过setcookie()
的好处/缺点?
缺点是如果需要,您需要自己编码值。
上面已经解释了好处。
- 哪一个是安全/更好/安全/可靠/等等。
setcookie()
或setrawcookie()
?
setcookie()
叶从人不熟悉cookie protocol错误更少的空间。
但是这是以牺牲成本为前提的 - 假设你总是需要URL编码。假设在编程中通常是一件坏事。
对于新手来说,setcookie()
更易于使用。
对于专家来说,setrawcookie()
限制较少,因此更加灵活。
两者本质上都不会更好,因为您提到“安全” - 对安全性没有任何影响。
- 不能饼干设置像像
$_COOKIE['cookie_variable'] = 'some_value'
代替使用setcookie()
或setrawcookie()
其他变量?
号
这是在我看来,一个艰巨的任务。怀疑任何人都会回答所有这些问题。 – Andreas
参见'urlencode':http://php.net/manual/en/function.urlencode.php – HostFission