为了账号安全,请及时绑定邮箱和手机立即绑定

检查是否启用了cookie

/ 猿问

检查是否启用了cookie

慕妹3242003 2019-09-21 14:48:24

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


我只想到了几个主意:


将会话ID嵌入链接和表单中

警告用户如果禁用了cookie,则必须启用cookie(需要帮助来检测cookie是否被禁用)

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


编辑


根据链接的文章,我想出了自己的方法,并认为我会分享,也许其他人也可以使用它,也许我会得到一些批评。(假设您的PHP会话存储在名为的Cookie中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>


查看完整描述

3 回答

?
慕勒3428872

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;

现代化Cookie检查提交

检查是否启用了Cookies

PHP

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


somescript.php


<?php

session_start();

setcookie('foo', 'bar', time()+3600);

header("location: check.php");

check.php


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


查看完整回答
反对 回复 2019-09-21
?
一只甜甜圈

但是要检查是否使用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";


查看完整回答
反对 回复 2019-09-21
?
弑天下

一种透明,干净且简单的方法,使用PHP检查cookie的可用性,并利用AJAX透明重定向的优势,因此不会触发页面重新加载。它也不需要会话。


客户端代码(JavaScript)


function showCookiesMessage(cookiesEnabled) {

    if (cookiesEnabled == 'true')

        alert('Cookies enabled');

    else

        alert('Cookies disabled');

}


$(document).ready(function() {

    var jqxhr = $.get('/cookiesEnabled.php');

    jqxhr.done(showCookiesMessage);

});

(可以将JQuery AJAX调用替换为纯JavaScript AJAX调用)


服务器端代码(PHP)


if (isset($_COOKIE['cookieCheck'])) {

    echo 'true';

} else {

    if (isset($_GET['reload'])) {

        echo 'false';

    } else {

        setcookie('cookieCheck', '1', time() + 60);

        header('Location: ' . $_SERVER['PHP_SELF'] . '?reload');

        exit();

    }

}

第一次调用脚本时,将设置cookie,并且脚本告诉浏览器重定向到其自身。浏览器将透明地执行此操作。没有页面重新加载发生,因为它是在AJAX调用范围内完成的。


第二次,当通过重定向调用时,如果收到cookie,则脚本将响应HTTP 200(带有字符串“ true”),因此将showCookiesMessage调用该函数。


如果第二次调用脚本(由“ reload”参数标识)并且未接收到cookie,则它将使用字符串“ false”响应HTTP 200-并且showCookiesMessage将调用该函数。


查看完整回答
反对 回复 2019-09-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信