检查cookie会导致PHP出错


Checking for cookies results in an error in PHP

我试图创建一个系统,通过用PHP编写的cookie来检查您以前是否访问过该网站,或者您是否是新用户。

代码:

<?php
if(isset($_COOKIE['cookie'])) {                 //Checking for cookie, this is line 2
    echo "You have visited before";
}else{                                          //If there is no cookie
    echo "Welcome to this site!";
    setcookie("cookie", "cookie_is_set", );     //Setting cookie because user has visited
};

当我运行此代码时,我得到以下错误:

注意:第2行C:''Apache24''htdocs''cookietest''index.php中的未定义索引:cookie

在查看了其他人的代码后,我怀疑这是因为我的PHP中出现了一些错误或其他什么。。。那么我应该禁用它吗?还有其他问题吗?

感谢您提前回答,San Bergam

Seem在您的代码中没有错误。在您的错误消息中,"注意:未定义的索引:有趣"。但在您的代码中,我看不到"有趣"的索引。

我们有两种方法来检查cookie是否存在

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

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

无论如何,您的代码都有一个与索引"fun"无关的问题。如果你在Window上测试,结果也很可能被缓存在浏览器中,也可能被操作系统缓存。在Windows上测试时,我经常遇到这个问题。

您的错误:

setcookie("cookie","cookie_is_set",)

根据手册

http://www.php.net/manual/en/function.setcookie.php

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

您可以传递一个名称&字符串值和cookie将在会话结束时过期,通常是在浏览器关闭时,或者在浏览打开时手动清除缓存时。

if(isset($_COOKIE['cookie'])) {
    echo "You have visited before";
} else {
    setcookie("cookie", "cookie_is_set", 0);
    echo "Welcome to this site!";
}

如果使用windows中的php -a或*nix将代码放入控制台,则会打印消息"Welcome to this site!"。如果将其放入php文件(例如index.php)中,也会发生同样的情况,但在随后的刷新中,会显示消息"You have visited before"