1

我想检查我网站的用户是否允许使用 cookie。

基本上我想做以下事情:

<?php
     if(cookies are enabled)
     {
          /* Cookies related code goes here */
          /* Create PHP cookie, read cookies etc */
     }
     else
     {
          /* Do something else */
     }
?>

我的想法是检查setcookie函数是否返回true然后启用cookie,否则不启用。

4

3 回答 3

4

如上所述:它并不总是有效。

所以,基本上,你可以做这样的事情:

<?php
setcookie('enabled', '1');
if($_COOKIE['enabled']=='1'){
    echo('Cookies are enabled. ');
}else{
    if($_GET['nocookies']==1){
        echo('Cookies are disabled. ');
    }else{
        $adr = explode('/', $_SERVER['SCRIPT_NAME']);
        header('Location: '.$adr[count($adr)-1].'?nocookies=1');
    }
}
?>
于 2012-04-05T13:49:35.620 回答
1

'setcookie' 返回是不够的。对于 Firefox,即使 cookie 被禁用,此函数也会返回 true。我认为检查它的最佳方法是在 cookie 中设置一个值并在下一个请求中检查该值。

于 2012-04-05T13:24:58.730 回答
-2

要准确回答您的问题,如果您创建一个函数

<?php
function cookies_are_enabled() {
    setcookie('enabled', 'enabled');
    return $_COOKIE['enabled'] === 'enabled';
}
?>

然后在你的代码中你有:

<?php
if (cookies_are_enabled()) {
  /* Cookies related code goes here */
  /* Create PHP cookie, read cookies etc */
} else {
  /* Do something else */
}
?>

更新:正如评论中指出的那样。这不会直接起作用。从setcookie PHP 页面(我的重点):

'一旦设置了 cookie,就可以在下一页加载时使用 $_COOKIE 或 $HTTP_COOKIE_VARS 数组访问它们。注意,像 $_COOKIE 这样的超全局变量在 PHP 4.1.0 中可用。Cookie 值也存在于 $_REQUEST 中。

鉴于您不能信任 setcookie,我能想到的最好的办法就是强制重定向。

<?php
function cookies_are_enabled() {
    // if first page load
    // set cookie and redirect
    // if redirected check the cookie
    if (isset($_GET['cookie_check'])) {
        return $_COOKIE['enabled'] === 'enabled';
    } else {
        setcookie('enabled', 'enabled');
        if (empty($_SERVER['QUERY_STRING'])) {
            $url = $_SERVER['PHP_SELF'].'?cookie_check=1';
        } else {
            $url = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&cookie_check=1';
        }
        exit(header("Location: $url"));
    }
}

if (cookies_are_enabled()) {
    /* Cookies related code goes here */
    /* Create PHP cookie, read cookies etc */
    $message = 'cookies are enabled';
} else {
    /* Do something else */
    $message = 'cookies are <strong>not</strong> enabled';
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Cookies!</title>
</head>
<body>
    <p><?php echo $message; ?></p>
</body>
</html>
于 2013-04-09T15:46:59.870 回答