检查是否启用了cookie而没有重定向

时间:2015-06-12 13:16:37

标签: php cookies

我需要在每个页面上检查是否启用了cookie。并使用此代码。

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

然而,在第一次检查时,它给了我假,直到我不刷新页面。我在每个页面中包含此代码,因此每次加载页面时都无法重定向,因为它会降低性能。但是我想要使用它即使javascript被禁用。任何建议?

2 个答案:

答案 0 :(得分:2)

你能用javascript吗?如果是这样,只需检查navigator.cookieEnabled变量。

适用于大多数现代浏览器。您可以在此处详细了解:http://www.w3schools.com/jsref/prop_nav_cookieenabled.asp

答案 1 :(得分:1)

这是不可能的,因为Cookies在浏览器中,并且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来做这件事。

干杯。

相关问题