在cookie名称中使用括号 - 为什么PHP将其转换为数组?

Chr*_*her 1 php cookies curl

我正在尝试在cookie的名称中使用括号.

它应该看起来像这样(这是浏览器想要它!):

Name: name[123456].newName
Content: 20
Run Code Online (Sandbox Code Playgroud)

这是我的例子:

$cookie = "name[123456].newName=20"
Run Code Online (Sandbox Code Playgroud)

但是当我分析浏览器看到的内容时,我得到了这个:

cookie['name'] = Array
Run Code Online (Sandbox Code Playgroud)

而且我要:

cookie['name[123456].newName'] = 20
Run Code Online (Sandbox Code Playgroud)

我的问题是:我应该如何以浏览器理解的方式编写cookie名称?

先感谢您.

Álv*_*lez 5

实际上,你所要做的就是:

<?php

setcookie('name[123456].newName', 20);

?>
Run Code Online (Sandbox Code Playgroud)

这会生成以下标头:

Set-Cookie: name[123456].newName=20
Run Code Online (Sandbox Code Playgroud)

...和浏览器(好吧,至少是Firefox)似乎处理得很好.

当您想要读回值时,问题就开始了.PHP有一个不错的功能:每当它找到一个带有方括号的输入参数(get,post,cookie ......)时,它就会从中构建一个数组.所以print_r($_COOKIE)显示这个:

Array
(
    [name] => Array
        (
            [123456] => 20
        )

)
Run Code Online (Sandbox Code Playgroud)

我不知道有任何方法可以禁用此功能,因此您可能需要使用字符串函数并解析原始cookie的内容,可以在以下位置找到$_SERVER['HTTP_COOKIE']:

name[123456].newName=20
Run Code Online (Sandbox Code Playgroud)

  • +1.我不认为这个功能很好; 实际上我认为这是一个严重的PHP设计缺陷.你经常可以通过向它们发送一个数组`a []`来运行脚本,它们期望单个值`a`(使它们保留错误的数据类型!),并且它们无法解析具有相同名称的多个输入而没有` []`.为单值输入和多值输入设置单独的超全球会好得多. (2认同)