我需要在每个页面上检查是否启用了cookie。并使用此代码。
<?php
setcookie('COOK_CHK',uniqid(),time()+60*60*24);
if(!isset($_COOKIE['COOK_CHK'])){
echo"Cookies are disabled!";
exit;
}
session_start();
?>
然而,在第一次检查时,它给了我假,直到我不刷新页面。我在每个页面中包含此代码,因此每次加载页面时都无法重定向,因为它会降低性能。但是我想要使用它即使javascript被禁用。任何建议?
答案 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来做这件事。
干杯。