检查是否启用了 Cookie

2022-08-30 08:04:47

我正在处理一个需要javascript和会话的页面。我已经有代码来警告用户,如果javascript被禁用。现在,我想处理禁用cookie的情况,因为会话ID存储在cookie中。

我想到了几个想法:

  1. 在链接和表单中嵌入会话 ID
  2. 警告用户,如果 Cookie 被禁用,他们必须启用它们(需要帮助检测 Cookie 是否被禁用)

解决这个问题的最佳方法是什么?谢谢

编辑

根据链接的文章,我想出了我自己的方法,并认为我会分享,其他人可能会使用它,也许我会得到一些批评。(假设您的 PHP 会话存储在名为PHPSESSID)

<div id="form" style="display:none">Content goes here</div>
<noscript>Sorry, but Javascript is required</noscript>
<script type="text/javascript"><!--
if(document.cookie.indexOf('PHPSESSID')!=-1)
   document.getElementById('form').style.display='';
else
   document.write('<p>Sorry, but cookies must be enabled</p>');
--></script>

答案 1

JavaScript

在 JavaScript 中,您可以对 cookieEnabled 属性进行简单测试,该属性在所有主流浏览器中都受支持。如果您处理的是较旧的浏览器,则可以设置cookie并检查它是否存在。(借用自Modernizer):

if (navigator.cookieEnabled) return true;

// set and read cookie
document.cookie = "cookietest=1";
var ret = document.cookie.indexOf("cookietest=") != -1;

// delete cookie
document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";

return ret;

菲律宾比索

在PHP中,它相当“复杂”,因为您必须刷新页面或重定向到另一个脚本。在这里,我将使用两个脚本:

一些脚本.php

<?php
session_start();
setcookie('foo', 'bar', time()+3600);
header("location: check.php");

检查.php

<?php echo (isset($_COOKIE['foo']) && $_COOKIE['foo']=='bar') ? 'enabled' : 'disabled';

答案 2

但是要检查是否使用isset($_COOKIE[“cookie”])启用了cookie,您必须刷新。我这样做的方式(基于cookie的会话:)

session_start();
$a = session_id();
session_destroy();

session_start();
$b = session_id();
session_destroy();

if ($a == $b)
    echo"Cookies ON";
else
    echo"Cookies OFF";