PHP Conference Japan 2024

setrawcookie

(PHP 5、PHP 7、PHP 8)

setrawcookie发送 Cookie 而不对 Cookie 值进行 URL 编码

描述

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 并对其进行 unescape,则所有空格都将变为 '+'。
要解决此问题,请使用 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'。

请注意,逗号、空格和制表符是三个无效字符。IE、Firefox 和 Opera 可以正常使用这些字符,并且 PHP 也可以正常读取包含这些字符的 Cookie。但是,如果您想在从 php 设置的 Cookie 中使用这些字符,则需要使用 header()。
To Top