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

Php 检查是否在没有重定向的情况下启用了Cookie,php,cookies,Php,Cookies,我需要在每个页面上检查cookies是否已启用。并使用此代码 <?php setcookie('COOK_CHK',uniqid(),time()+60*60*24); if(!isset($_COOKIE['COOK_CHK'])){ echo"Cookies are disabled!"; exit; } session_start(); ?> 但是,在第一次检查时,它会给出false,直到我不刷新页面为止。我在每个页面中都包含此代码,因此无法在每次加载页面

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

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


但是,在第一次检查时,它会给出false,直到我不刷新页面为止。我在每个页面中都包含此代码,因此无法在每次加载页面时重定向,因为这会降低性能。但是,即使禁用javascript,我也希望使用它。有什么建议吗?

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


它适用于大多数现代浏览器。您可以在此处阅读更多信息:

这是不可能的,因为浏览器中有cookie,PHP会在页面呈现后发送cookie,因此仅在第二页中可用。 解决这个问题的一种可能方法是使用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来实现这一点


干杯。

你应该看看这里:)不幸的是,这些解决方案都不能解决我的问题。例如,一旦我设置了$\u cookie['COOK\u CHK']=uniqid();在StKCookie()之后,它会看到像cookie一样,你需要检查每一页你应该考虑重新设计你的系统,因为没有很好的解决方案。实际上,缓存层是理想的,因为你可以在1分钟后放一个变量消失。