Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP';s setcookie()有时需要一个值?_Php_Cookies - Fatal编程技术网

PHP';s setcookie()有时需要一个值?

PHP';s setcookie()有时需要一个值?,php,cookies,Php,Cookies,我已经使用下面的代码检测是否启用了cookie,但最近才发现,即使浏览器设置为允许cookie,也没有成功。这是一个简单的检查,检查在处理过程中是否依赖cookie 我们最近迁移到了PHP版本5.6.21,但是没有提到任何关于更改setcookie方法的内容,但是明确指出,如果不指定任何内容,则默认为空值。PHP版本5.6.10也有不同的行为 这里谈到了类似的问题,但没有提到正在使用的PHP版本 值得一提的是,所有设置cookie的示例都会传递一个值(删除部分除外),下面是关于传递空白的注意事项

我已经使用下面的代码检测是否启用了cookie,但最近才发现,即使浏览器设置为允许cookie,也没有成功。这是一个简单的检查,检查在处理过程中是否依赖cookie

我们最近迁移到了PHP版本5.6.21,但是没有提到任何关于更改setcookie方法的内容,但是明确指出,如果不指定任何内容,则默认为空值。PHP版本5.6.10也有不同的行为

这里谈到了类似的问题,但没有提到正在使用的PHP版本

值得一提的是,所有设置cookie的示例都会传递一个值(删除部分除外),下面是关于传递空白的注意事项:

如果value参数为空字符串或FALSE,且所有其他参数与之前对setcookie的调用相匹配,则具有指定名称的cookie将从远程客户端删除[emphasis mine]

我对此的解释是,如果cookie不存在(之前没有使用该名称调用setcookie),它应该创建它

守则:

# Before any html is output:
function cookiesEnabled(){
    if(isset($_COOKIE["cookiesEnabled"])){
        return true;
    }else{
        if(isset($_GET["reloaded"])){
            return false;
        }else{
            setcookie("cookiesEnabled" /*,"ANY_VALUE_FIXES"*/);
            $query = "";
            if($_SERVER["QUERY_STRING"]){
                $query = "&".$_SERVER["QUERY_STRING"];
            }
            header("Location: ?reloaded=1".$query);
            exit();
        }
    }
}
# Check prior to any HTML content being echoed
if(!cookiesEnabled()){
    echo "Problem";
} else {
    echo "Success";
}
“成功”仅在给定
值时出现

我满足于将一个值填充为一个“修复”/“解决方案”,我很高兴它似乎有效(而且很容易),但提出这个问题是为了了解为什么行为似乎与文档不同,并希望从其他人那里得到确认

我们需要一个值的PHP版本是5.6.21。我不确定是什么其他服务器设置导致了这种行为。在使用PHP 5.6.10的其他服务器中,“成功”不需要值参数。当我们刚刚将其版本升级到5.6.21时,它也失败了

PHP是否需要更新其文档以明确说明需要值,或者是否引入了编码错误?我也没有任何联系人,因此感谢您将此潜在差异转发给可能存在的权力机构


注意:如果我
setcookie
像这样
setcookie(“cookiesEnabled”,即“”)
,则结果与未通过它相同(在5.6.10中成功,而不是在5.6.21中成功),因此至少文档可能将其默认为“”.

我想我会把这归因于版本差异和我偶然发现的幕后编码变化。然而,根据PHP文档,仍然不清楚哪种方法是正确的

我相信PHP5.6.21版本表示一个引入的bug,并创建一个没有值的cookie(以前没有值)应该仍然是可能的。如果新行为是永久性的,文档肯定需要更新

据我所知,在PHP5.6.10之前(包括PHP5.6.10),创建新cookie不需要传递值

如果更熟悉PHP内部工作的人能够说出
setcookie()
的意图,而不传递一个值(并且该名称之前不存在),那就太好了

由于文档在这两个版本之间没有更改,其中一种方法是错误的,我希望这个问题能够解决


如果您也遇到了这个问题,谢谢您的评论。

我想我会把它归因于版本差异和我偶然发现的幕后编码更改。然而,根据PHP文档,仍然不清楚哪种方法是正确的

我相信PHP5.6.21版本表示一个引入的bug,并创建一个没有值的cookie(以前没有值)应该仍然是可能的。如果新行为是永久性的,文档肯定需要更新

据我所知,在PHP5.6.10之前(包括PHP5.6.10),创建新cookie不需要传递值

如果更熟悉PHP内部工作的人能够说出
setcookie()
的意图,而不传递一个值(并且该名称之前不存在),那就太好了

由于文档在这两个版本之间没有更改,其中一种方法是错误的,我希望这个问题能够解决

如果你也遇到了这个问题,谢谢你的评论。

空cookies会自动删除,顺便说一句,它在文档中。谢谢——我没有发现这个问题,但它非常相似。可惜他没有提到PHP版本,因为我的两个版本的表现非常不同。我承认在我的问题中有同一行文档,但如果之前没有看到cookie的名称,这似乎意味着创建将发生——虽然没有明确告诉空cookie会自动删除,但它在文档中。顺便说一句,谢谢——我没有发现这个问题,但它非常相似。可惜他没有提到PHP版本,因为我的两个版本的表现非常不同。在我的问题中,我承认这是同一行文档,但如果之前没有看到cookie的名称,这似乎意味着创建将发生——尽管没有明确告知