PHP Conference Japan 2024

setrawcookie

(PHP 5, PHP 7, PHP 8)

setrawcookie傳送未經 urlencode 編碼的 Cookie 值

說明

setrawcookie(
    字串 $name,
    字串 $value = ?,
    整數 $expires_or_options = 0,
    字串 $path = ?,
    字串 $domain = ?,
    布林值 $secure = false,
    布林值 $httponly = false
): 布林值

PHP 7.3.0 起提供替代簽名(不支援命名參數)

setrawcookie(字串 $name, 字串 $value = ?, 陣列 $options = []): 布林值

setrawcookie()setcookie() 完全相同,差別在於 Cookie 值在發送至瀏覽器時不會自動進行 URL 編碼。

參數

有關參數資訊,請參閱 setcookie() 文件。

返回值

成功時返回 true,失敗時返回 false

更新日誌

版本 說明
7.3.0 新增了支援 options 陣列的替代簽名。此簽名也支援設定 SameSite Cookie 屬性。

另請參閱

新增註釋

使用者提供的註釋 2 則註釋

Brian
18 年前
Firefox 遵循真正的規範,不會將 '+' 解碼為空格... 事實上,它會進一步將它們編碼為 '%2B' 來儲存 Cookie。如果您使用 JavaScript 讀取 Cookie 並取消跳脫字元,則所有空格都會變成 '+'。
要解決此問題,請使用 setrawcookie 和 rawurlencode

<?php
setrawcookie
('cookie_name', rawurlencode($value), time()+60*60*24*365);
?>

唯一的改變是空格會被編碼為 '%20' 而不是 '+',現在可以正確解碼。
subs at voracity dot org
17 年前
setrawcookie() 並非完全「原始」。它會檢查值中是否有無效字元,如果有,則不允許使用該 Cookie。這些是需要注意的無效字元:',;<space>\t\r\n\013\014'。

請注意,逗號、空格和 Tab 鍵是三個無效字元。IE、Firefox 和 Opera 瀏覽器可以正常處理這些字元,PHP 讀取包含這些字元的 Cookie 也可以正常運作。但是,如果您想在 PHP 設定的 Cookie 中使用這些字元,則需要使用 header() 函式。
To Top