it-swarm.com.de

Prüfen Sie, ob Cookies aktiviert sind

Ich arbeite an einer Seite, für die Javascript und Sitzungen erforderlich sind. Ich habe bereits Code, um den Benutzer zu warnen, wenn Javascript deaktiviert ist. Nun möchte ich den Fall behandeln, in dem Cookies deaktiviert sind, da die Sitzungs-ID in Cookies gespeichert ist.

Ich habe nur an ein paar Ideen gedacht:

  1. Einbetten der Sitzungs-ID in die Links und Formulare
  2. Den Benutzer warnen, dass er Cookies aktivieren muss, wenn er deaktiviert ist (müsste Hilfe gefunden werden, wenn Cookies deaktiviert sind)

Wie gehen Sie am besten vor? Vielen Dank

EDIT

Aufgrund der verlinkten Artikel kam ich zu meiner eigenen Herangehensweise und dachte, ich könnte sie teilen, vielleicht könnte jemand anderes sie verwenden, vielleicht bekomme ich ein paar Kritiken. (Nimmt an, dass Ihre PHP -Sitzung in einem Cookie namens PHPSESSID gespeichert wird.)

<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

In JavaScript testen Sie einfach die Eigenschaft cookieEnabled , die in allen gängigen Browsern unterstützt wird. Wenn Sie mit einem älteren Browser arbeiten, können Sie ein Cookie setzen und prüfen, ob es existiert. (geliehen von 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

In PHP ist es eher "kompliziert", da Sie die Seite aktualisieren oder zu einem anderen Skript umleiten müssen. Hier werde ich zwei Skripte verwenden:

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

Aber um zu prüfen, ob Cookies mit isset ($ _ COOKIE ["cookie"]) aktiviert werden, müssen Sie .

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

Ein transparenter, sauberer und einfacher Ansatz, der die Verfügbarkeit von Cookies mit PHP prüft und AJAX transparente Umleitung ausnutzt, so dass kein Neuladen der Seite. Es sind auch keine Sitzungen erforderlich.

Clientseitiger Code (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 - Aufruf kann durch einen reinen JavaScript AJAX - Aufruf ersetzt werden)

Serverseitiger Code (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();
    }
}

Beim ersten Aufruf des Skripts wird das Cookie gesetzt und das Skript weist den Browser an, auf sich selbst umzuleiten. Der Browser macht dies transparent. Es erfolgt kein Neuladen der Seite, da dies innerhalb eines Aufrufbereichs AJAX erfolgt.

Wenn das Cookie zum zweiten Mal durch Umleitung aufgerufen wird, antwortet das Skript auf ein HTTP 200 (mit der Zeichenfolge "true"). Daher wird die Funktion showCookiesMessage aufgerufen.

Wenn das Skript zum zweiten Mal aufgerufen wird (durch den Parameter "reload" identifiziert) und der Cookie nicht empfangen wird, antwortet er einem HTTP 200 mit der Zeichenfolge "false" - und die Funktion showCookiesMessage wird aufgerufen.

6
zibilico

Sie können nicht in der gleichen Seite laden und prüfen, ob Cookies gesetzt sind, und Sie müssen die Seite neu laden: 

  • PHP läuft auf dem Server;
  • cookies beim Kunden.
  • cookies werden nur während des Ladens einer Seite an den Server gesendet.
  • Gerade erstellte Cookies wurden noch nicht an den Server gesendet und werden nur beim nächsten Laden der Seite gesendet.
5
drfunjohn

Sie können einen Ajax-Aufruf durchführen ( Note : Diese Lösung erfordert JQuery):

example.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';
}

Als Ergebnis erscheint ein Benachrichtigungsfeld, das anzeigt, ob Cookies aktiviert sind oder nicht. Natürlich müssen Sie kein Benachrichtigungsfeld anzeigen, von hier aus können Sie andere Schritte unternehmen, um mit deaktivierten Cookies umzugehen.

2
Black

JavaScript

Sie können einen Cookie mit JavaScript erstellen und prüfen, ob er existiert:

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

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

Oder verwenden Sie ein jQuery Cookie Plugin

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

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

Php

setcookie("testcookie", "testvalue");

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

}

Ich bin mir nicht sicher, ob das PHP funktioniert, da ich es nicht testen kann.

1
Tomgrohl

Hier ist ein sehr nützliches und leichtes Javascript-Plugin, um dies zu erreichen: 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);

Funktioniert in allen Browsern, akzeptiert beliebige Zeichen.

0
Grant

es ist leicht zu erkennen, ob die Cookies aktiviert sind:

  1. einen Cookie setzen.
  2. holen Sie sich den Keks

wenn Sie das von Ihnen gesetzte Cookie erhalten können, ist die Variable cookie aktiviert, andernfalls nicht.

Übrigens: Es ist eine schlechte Idee, Embedding the session id in the links and forms, es ist schlecht für SEO ..__ Meiner Meinung nach ist nicht sehr verbreitet / dass die Leute keine Cookies zulassen möchten.

0
James.Xu

Cookies sind clientseitig und können mit PHP nicht ordnungsgemäß getestet werden. Das ist die Grundlage und jede Lösung ist ein Wrap-around für dieses Problem.

Wenn Sie also nach einer Lösung für Ihr Cookie-Problem suchen, sind Sie auf dem falschen Weg. Verwenden Sie keine PHP, verwenden Sie eine Clientsprache wie Javascript.

Können Sie Cookies mit PHP verwenden? Ja, aber Sie müssen neu laden, um die Einstellungen auf PHP 'sichtbar' zu machen.

Zum Beispiel: Ist ein Test möglich, um zu sehen, ob der Browser Cookies mit einfachem PHP 'setzen kann. Die einzig richtige Antwort lautet "NEIN". 

Kannst du ein bereits gesetztes Cookie lesen: 'YES' verwende das vordefinierte $ _COOKIE (Eine Kopie der Einstellungen vor dem Start der PHP-App).

0
Harm