web-dev-qa-db-fra.com

Vérifier si les cookies sont activés

Je travaille sur une page qui nécessite JavaScript et des sessions. J'ai déjà du code pour avertir l'utilisateur si javascript est désactivé. Maintenant, je veux gérer le cas où les cookies sont désactivés, car l'identifiant de session est stocké dans les cookies.

J'ai pensé à quelques idées:

  1. Incorporation de l'identifiant de session dans les liens et les formulaires
  2. Avertissez l'utilisateur qu'il doit activer les cookies s'il est désactivé (il serait utile de détecter si les cookies sont désactivés)

Quelle est la meilleure façon d'aborder cela? Merci

MODIFIER

Sur la base des articles liés, j'ai proposé ma propre approche et j'ai pensé partager, quelqu'un d'autre pourrait peut-être l'utiliser, peut-être que je vais recevoir quelques critiques. (Supposons que votre PHP session stocke dans un cookie nommé 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>
61
steveo225

JavaScript

En JavaScript, vous testez simplement la propriété cookieEnabled , prise en charge par tous les principaux navigateurs. Si vous utilisez un navigateur plus ancien, vous pouvez définir un cookie et vérifier s'il existe. (emprunté à 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

Dans PHP, c'est plutôt "compliqué" puisque vous devez actualiser la page ou rediriger vers un autre script. Ici, je vais utiliser deux scripts:

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';
70
Sascha Galley

Mais pour vérifier si les cookies sont activés avec isset ($ _ COOKIE ["cookie"]), vous devez actualiser . Je le fais de cette manière (avec des sessions basées sur des cookies :)

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

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

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

Une approche simple, transparente et transparente, vérifiant la disponibilité des cookies avec PHP et tirant parti de la redirection transparente AJAX, d’où sans déclencher de rechargement de page. Il ne nécessite pas de sessions non plus.

Code côté client (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);
});

(L'appel JQuery AJAX peut être remplacé par un appel JavaScript pur AJAX)

Code côté serveur (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();
    }
}

La première fois que le script est appelé, le cookie est défini et le script indique au navigateur de se rediriger vers lui-même. Le navigateur le fait de manière transparente. Aucun rechargement de page n'a lieu car il est effectué dans le cadre d'un appel AJAX.

La deuxième fois, lorsqu'il est appelé par redirection, si le cookie est reçu, le script répond à un HTTP 200 (avec la chaîne "true"). La fonction showCookiesMessage est donc appelée.

Si le script est appelé pour la deuxième fois (identifié par le paramètre "reload") et que le cookie n'est pas reçu, il répond à un HTTP 200 avec la chaîne "false" et la fonction showCookiesMessage est appelée.

6
zibilico

Vous ne pouvez pas dans le même ensemble de chargement de la page et vérifier si les cookies sont définis, vous devez effectuer le rechargement de la page: 

  • PHP exécuté sur le serveur;
  • cookies chez le client.
  • cookies envoyés au serveur uniquement pendant le chargement d'une page.
  • Les cookies récemment créés n'ont pas encore été envoyés au serveur et ne seront envoyés qu'au prochain chargement de la page.
5
drfunjohn

Vous pouvez effectuer un appel Ajax ( Remarque : Cette solution nécessite JQuery):

exemple.php

<?php
    setcookie('CookieEnabledTest', 'check', time()+3600);
?>

<script type="text/javascript">

    CookieCheck();

    function CookieCheck()
    {
        $.post
        (
            'ajax.php',
            {
                cmd: 'cookieCheck'
            },
            function (returned_data, status)
            {
                if (status === "success")
                {
                    if (returned_data === "enabled")
                    {
                        alert ("Cookies are activated.");
                    }
                    else
                    {
                        alert ("Cookies are not activated.");
                    }
                }
            }
        );
    }
</script>

ajax.php

$cmd = filter_input(INPUT_POST, "cmd");

if ( isset( $cmd ) && $cmd == "cookieCheck" )
{
    echo (isset($_COOKIE['CookieEnabledTest']) && $_COOKIE['CookieEnabledTest']=='check') ? 'enabled' : 'disabled';
}

Il en résulte un message d’alerte indiquant si les cookies sont activés ou non. Bien entendu, vous n'avez pas à afficher de boîte d'alerte. À partir de là, vous pouvez prendre d'autres mesures pour gérer les cookies désactivés.

2
Black

JavaScript

Vous pouvez créer un cookie en utilisant JavaScript et vérifier s'il existe:

//Set a Cookie`
document.cookie="testcookie"`

//Check if cookie exists`
cookiesEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false`

Ou vous pouvez utiliser un plugin jQuery Cookie

//Set a Cookie`
$.cookie("testcookie", "testvalue")

//Check if cookie exists`
cookiesEnabled=( $.cookie("testcookie") ) ? true : false`

Php

setcookie("testcookie", "testvalue");

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

}

Pas sûr que le PHP fonctionne, je suis incapable de le tester.

1
Tomgrohl

Voici un plugin javascript très utile et léger pour y parvenir: js-cookie

Cookies.set('cookieName', 'Value');
      setTimeout(function(){
        var cookieValue =  Cookies.get('cookieName');
        if(cookieValue){
           console.log("Test Cookie is set!");
        } else {
           document.write('<p>Sorry, but cookies must be enabled</p>');
        }
        Cookies.remove('cookieName');
      }, 1000);

Fonctionne dans tous les navigateurs, accepte n'importe quel caractère.

0
Grant

il est facile de détecter si les cookies sont activés:

  1. mettre un cookie.
  2. récupère le cookie

si vous pouvez obtenir le cookie que vous avez défini, la cookie est activée, sinon ce n'est pas le cas.

BTW: c’est une mauvaise idée de Embedding the session id in the links and forms, c’est mauvais pour le référencement . Selon moi, c’est pas très courant que les gens ne veulent pas activer les cookies.

0
James.Xu

Les cookies sont côté client et ne peuvent pas être testés correctement avec PHP .C'est la base et chaque solution résout ce problème.

Cela signifie que si vous cherchez une solution à votre problème de cookies, vous êtes sur la mauvaise voie. N'utilisez pas PHP, utilisez un langage client tel que Javascript.

Pouvez-vous utiliser des cookies en utilisant PHP? Oui, mais vous devez recharger pour rendre les paramètres sur PHP 'visibles'.

Par exemple: Un test est-il possible de voir si le navigateur peut définir des cookies avec du PHP simple '. La seule réponse correcte est "NON". 

Pouvez-vous lire un cookie déjà défini: 'YES' utilise le $ _COOKIE (une copie des paramètres prédéfinis avant de démarrer PHP-App).

0
Harm