- 什麼實際的手段幾乎發生「的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