检查是否在没有重定向的情况下启用了 cookie

Check if cookies are enabled without redirect

我需要在每个页面上检查 cookie 是否 enabled.And 使用此代码。

<?php
setcookie('COOK_CHK',uniqid(),time()+60*60*24);
if(!isset($_COOKIE['COOK_CHK'])){
    echo"Cookies are disabled!";
    exit;
}
session_start();
?>

但是在第一次检查时它给了我错误,直到我不刷新 page.I 在每个页面中包含此代码所以每次我加载页面时都无法重定向,因为它减少了 performance.However我想使用它,即使 javascript 是 disabled.Any 个建议?

可以使用javascript吗?如果是这样,只需检查 navigator.cookieEnabled 变量即可。

它适用于大多数现代浏览器。您可以在这里阅读更多相关信息:http://www.w3schools.com/jsref/prop_nav_cookieenabled.asp

不可能,因为 Cookie 位于浏览器中,并且 PHP 在页面呈现时发送它们,因此仅在第二页中可用。 解决此问题的一种可能方法是使用 javascript。 如果你真的应该在 PHP 中这样做,出于某种疯狂的原因,将你的所有请求发送到主控制器并使用其他方法保存状态,例如,将 var 写入文件,然后重定向并在下一个重定向 您将知道是否已启用 cookie 而无需任何其他重定向。示例:

$file = 'cookie_fake_'.$userIP;
if( !isset($_COOKIE['COOK_CHK']) && !file_exists($file) ){
    file_put_contents($file, 'dummy');
    setcookie('COOK_CHK',uniqid(),time()+60*60*24);
    header('Location:/');
    exit;
}
if(!isset($_COOKIE['COOK_CHK'])){
    setcookie('COOK_CHK',uniqid(),time()+60*60*24);
    echo"Cookies are disabled!";
    exit;
}

那么你应该每隔一小时左右写一些东西来清理旧文件,当然你可以使用缓存层或数据库或类似的东西来代替写文件。


编辑:如果用户启用 cookie 并刷新页面,之前的代码将非常糟糕,现在我已经修复,因此它在第二次刷新时可以正常工作。不完美但是......你真的应该使用 javascript.

干杯。