我将如何测试是否使用 php 设置了 cookie,如果未设置,则不执行任何操作

How would I test if a cookie is set using php and if it's not set do nothing

提问人:Aaron 提问时间:5/2/2011 更新时间:8/21/2022 访问量:60168

问:

我试过了

 $cookie = $_COOKIE['cookie'];

如果未设置cookie,则会给我一个错误

PHP ERROR
Undefined index: cookie

我如何防止它给我一个空变量>

PHP 饼干

评论


答:

6赞 Shoe 5/2/2011 #1

取决于您的需求。

// If not set, $cookie = NULL;
if (isset($_COOKIE['cookie'])) { $cookie = $_COOKIE['cookie']; }

// If not set, $cookie = '';
$cookie = (isset($_COOKIE['cookie'])) ? $_COOKIE['cookie'] : '';

// If not set, $cookie = false;
$cookie = (isset($_COOKIE['cookie'])) ? $_COOKIE['cookie'] : false;

引用:

评论

1赞 Marc B 5/3/2011
你的第一个只是将它从未定义的数组索引更改为一个未定义的变量,你已经把 OP 放回原点。
0赞 Shoe 5/3/2011
@Marc B,没有。它只是设置或不设置。OP从未说过他会再次使用。$cookie$cookie
1赞 Marc B 5/3/2011
是的,如果未设置,则它不会设置 ,所以现在您有一个未定义的数组字段和一个未定义的变量。如果 OP 之后尝试使用会怎样?$_COOKIE['cookie']$cookie$cookie
0赞 Shoe 5/3/2011
是的,你有它们,但只是用我的第一个解决方案尝试 OP 代码,就不会出现错误。他要求错误消失。:)
4赞 Naftali 5/2/2011 #2

试试这个:

 $cookie = isset($_COOKIE['cookie'])?$_COOKIE['cookie']:'';
 //checks if there is a cookie, if not then an empty string
19赞 John Parker 5/2/2011 #3

为此,您可以使用array_key_exists,如下所示:

$cookie = array_key_exists('cookie', $_COOKIE) ? $_COOKIE['cookie'] : null;

评论

12赞 John Parker 5/3/2011
耶!没有解释的匿名反对票 - 多么有帮助。:-)
0赞 Nereare 8/17/2016
通常的 isset() 方法的不错替代品!
0赞 Mike Q 1/22/2019
@JohnParker您不应该包括cookie是否也已设置,因为我多次假设重点是检查它是否未过期?
2赞 Hasenpriester 5/8/2020
@Mike isset() 也不会这样做。我认为当您知道数组(在本例中为 $_COOKIE)存在并且可以访问时,array_key_exists() 是一种更好的方法。
0赞 Giorgos Iordanidis 11/13/2020
如果 $_COOKIE['cookie'] 存在于 $_COOKIE 中并且为 NULL,则该函数返回 TRUE。除非你同意,否则不要使用它!检查“Example #2 array_key_exists() vs isset()”: php.net/manual/en/function.array-key-exists.php#example-5401
53赞 gen_Eric 5/3/2011 #4

使用 isset 查看 cookie 是否存在。

if(isset($_COOKIE['cookie'])){
    $cookie = $_COOKIE['cookie'];
}
else{
    // Cookie is not set
}

评论

1赞 Mike Q 1/22/2019
该代码段应促进编码标准,这在少数情况下会引发警告。
0赞 Mike Q 1/22/2019 #5

回复中未提及的示例:假设如果条件合适,您将 cookie 设置为 60 秒:

if ($some_condition == $met_condition) {
    setcookie('cookie', 'some_value', time()+ 60, "/","", false);
}

从技术上讲,我们需要检查它是否已设置并且没有过期,否则它会抛出警告等。:

$cookie = ''; //or null if you prefer
if (array_key_exists('cookie', $_COOKIE) && isset($_COOKIE['cookie'])) {
    $cookie = $_COOKIE['cookie'];
}

您可能希望以一种确保不使用过期 cookie 并设置它的方式进行检查,上面的示例显然不能总是设置 cookie 等。我们应该始终考虑到这一点。array_key_exists主要是防止警告出现在日志中,但如果没有它,它就会起作用。

1赞 Favour okechukwu 8/21/2022 #6

这应该会有所帮助

$cookie = $_COOKIE['cookie']??'';

它是

if (isset($_COOKIE['cookie'])) {
     $cookie =$_COOKIE['cookie']; //cookie is set
  } else {
     $cookie = ""; //cookie not set
}

然后你可以做

if(!empty($cookie)){
     // do something
  }