在PHP中,内置函数setcookie()和setrawcookie()的实际功能差异是多少?
我正在学习最重要的概念Cookies在PHP的详细信息。在PHP中,内置函数setcookie()和setrawcookie()的实际功能差异是多少?
在学习饼干我才知道那个“发送cookie时cookie的值会自动url编码,并自动在接收时解码(为防止URL编码,使用setrawcookie()代替)。”
上述声明已经创造了我的脑海里这么多的质疑,内容如下:
- 什么实际的手段几乎发生“发送时,cookie的值会自动进行了urlencoded cookie,并在收到时自动解码“?
- 为什么需要另一个功能,如setrawcookie()当已有函数setcookie()可用于设置cookie值?
- 是URL编码的过程和URL解码不安全/有害/危险/缓慢/其他任何东西,所以它应该避免?
- 使用
setrawcookie()
超过setcookie()
有什么好处/缺点? - 哪一个是安全/更好/安全/可靠/等等。
setcookie()
或setrawcookie()
? - 不能像其他变量一样设置Cookie,如
$_COOKIE['cookie_variable'] = 'some_value'
而不是使用setcookie()
或setrawcookie()
?
如果有人能清除所有我上面提到的完善,适合和容易怀疑的理解与一步一步的脆皮以及代码示例,清晰,易于掌握的解释它会有很大很大的帮助我。
谢谢。
- 什么实际的手段几乎发生“的cookie的值发送cookie时会自动url编码,并自动在接收到的解码”?
这意味着你不必担心特殊字符。
请注意,cookie不是PHP的概念;它们是HTTP协议的扩展。而且每个协议都有一个你需要遵守的严格结构,否则它就无法工作。该结构依赖于分隔符 - 在该协议中赋予它们特殊含义的字符或字符序列。
通过每个协议传输的数据将不可避免地包含这些特殊字符,这就是为什么编码是必要的。
例如,分号(;
)用作Set-Cookie
HTTP Header中的分隔符,因此如果您的cookie值包含它,则需要对其进行编码或以其他方式在浏览器收到Cookie时不会正确解析Cookie 。
如果您发送与foo;bar
值的饼干,没有编码,浏览器将连接到它bar
标志把它当作值foo
。
作为数据的一部分,您将丢失;bar
,并且由于bar
根据协议是未知标志,因此浏览器会简单地忽略它,因此您甚至不会知道有错误。
当您将cookie设置为setcookie()
时,PHP将自动执行编码,然后在您从超文本对话框$_COOKIE
中读取时自动对其进行解码。
开始=“2”>
- 为什么有必要像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()
其他变量?
号
URL编码替换URLs/HTTP中具有特殊含义的特定字符与百分比编码字符,例如,一个空间变成%20
。有关血淋淋的细节,请参阅https://en.wikipedia.org/wiki/Percent-encoding。
如果您想设置一个您自己已经进行了网址编码的cookie,无论出于何种原因,您都需要setrawcookie
。所以如果你有一个已编码的cookie,其值为%20
,如果你使用setcookie
它将被编码为%2520
;使用setrawcookie
它将被保留原样并被设置为%20
。换句话说,setrawcookie
是一种方式“只需设置该死的cookie,我知道我在做什么。”使用它取决于您确保Cookie格式正确符合HTTP字符编码标准。
请参阅The Great Escapism (Or: What You Need To Know To Work With Text Within Text)如果您首先需要更多关于哪些编码或转义格式的背景信息。
这是在我看来,一个艰巨的任务。怀疑任何人都会回答所有这些问题。 – Andreas
参见'urlencode':http://php.net/manual/en/function.urlencode.php – HostFission