Ich arbeite an einer Seite, die Javascript und Sitzungen erfordert. Ich habe bereits Code, um den Benutzer zu warnen, wenn Javascript deaktiviert ist. Jetzt 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:
- Einbetten der Sitzungs-ID in die Links und Formulare
- Warnen Sie den Benutzer, dass Cookies aktiviert werden müssen, wenn sie deaktiviert sind (benötigen Sie Hilfe, um festzustellen, ob Cookies deaktiviert sind).
Was ist der beste Weg, um dies zu erreichen? Vielen Dank
BEARBEITEN
Basierend auf den verlinkten Artikeln kam ich auf meinen eigenen Ansatz und dachte, ich würde ihn teilen, jemand anderes könnte ihn vielleicht verwenden, vielleicht bekomme ich ein paar Kritiken. (Angenommen, Ihre PHP-Sitzung wird in einem Cookie mit dem Namen gespeichert. 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>
php
javascript
session-cookies
steveo225
quelle
quelle
Antworten:
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 vorhanden ist. (von Modernizer ausgeliehen ):
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 ziemlich "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';
PHP und Cookies, eine gute Mischung!quelle
Um zu überprüfen, ob Cookies mit isset ($ _ COOKIE ["cookie"]) aktiviert sind, müssen Sie eine Aktualisierung durchführen. Ich mache es so (mit Sitzungen basierend auf 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";
quelle
Antwort auf eine alte Frage, dieser neue Beitrag wurde am 4. April 2013 veröffentlicht
Um die Antwort von @misza zu vervollständigen, finden Sie hier eine erweiterte Methode, um zu überprüfen, ob Cookies aktiviert sind, ohne dass die Seite neu geladen werden muss. Das Problem mit @misza ist, dass es nicht immer funktioniert, wenn die PHP-INI-Einstellung
session.use_cookies
nicht wahr ist. Außerdem prüft die Lösung nicht, ob eine Sitzung bereits gestartet wurde.Ich habe diese Funktion gemacht und sie viele Male in verschiedenen Situationen getestet und mache den Job sehr gut.
function suGetClientCookiesEnabled() // Test if browser has cookies enabled { // Avoid overhead, if already tested, return it if( defined( 'SU_CLIENT_COOKIES_ENABLED' )) { return SU_CLIENT_COOKIES_ENABLED; } $bIni = ini_get( 'session.use_cookies' ); ini_set( 'session.use_cookies', 1 ); $a = session_id(); $bWasStarted = ( is_string( $a ) && strlen( $a )); if( !$bWasStarted ) { @session_start(); $a = session_id(); } // Make a copy of current session data $aSesDat = (isset( $_SESSION ))?$_SESSION:array(); // Now we destroy the session and we lost the data but not the session id // when cookies are enabled. We restore the data later. @session_destroy(); // Restart it @session_start(); // Restore copy $_SESSION = $aSesDat; // If no cookies are enabled, the session differs from first session start $b = session_id(); if( !$bWasStarted ) { // If not was started, write data to the session container to avoid data loss @session_write_close(); } // When no cookies are enabled, $a and $b are not the same $b = ($a === $b); define( 'SU_CLIENT_COOKIES_ENABLED', $b ); if( !$bIni ) { @ini_set( 'session.use_cookies', 0 ); } //echo $b?'1':'0'; return $b; }
Verwendung:
if( suGetClientCookiesEnabled()) { echo 'Cookies are enabled!'; } else { echo 'Cookies are NOT enabled!'; }
Wichtiger Hinweis: Die Funktion ändert vorübergehend die INI-Einstellung von PHP, wenn sie nicht die richtige Einstellung hat, und stellt sie wieder her, wenn sie nicht aktiviert wurde. Dies dient nur zum Testen, ob Cookies aktiviert sind. Es kann schief gehen, wenn Sie eine Sitzung starten und die PHP-INI-Einstellung session.use_cookies einen falschen Wert hat. Um sicherzustellen, dass die Sitzung ordnungsgemäß funktioniert, überprüfen und / oder legen Sie sie fest, bevor Sie eine Sitzung starten. Beispiel:
if( suGetClientCookiesEnabled()) { echo 'Cookies are enabled!'; ini_set( 'session.use_cookies', 1 ); echo 'Starting session'; @start_session(); } else { echo 'Cookies are NOT enabled!'; }
quelle
Sie können nicht im Ladeset derselben Seite nachsehen, ob Cookies gesetzt sind. Sie müssen die Seite neu laden:
quelle
Ein transparenter, sauberer und einfacher Ansatz, bei dem die Verfügbarkeit von Cookies mit PHP überprüft und die transparente AJAX- Umleitung genutzt wird, ohne dass ein erneutes Laden der Seite ausgelöst wird . 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 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, zu sich selbst umzuleiten. Der Browser macht das transparent. Es findet kein erneutes Laden der Seite statt, da dies innerhalb eines AJAX-Aufrufbereichs erfolgt .
Das zweite Mal, wenn das Cookie durch Umleitung aufgerufen wird und das Cookie empfangen wird, antwortet es auf ein HTTP 200 (mit der Zeichenfolge "true"), daher wird die
showCookiesMessage
Funktion aufgerufen.Wenn das Skript zum zweiten Mal aufgerufen wird (gekennzeichnet durch den Parameter "reload") und das Cookie nicht empfangen wird, antwortet es einem HTTP 200 mit der Zeichenfolge "false" - und die
showCookiesMessage
Funktion wird aufgerufen.quelle
Sie können einen Ajax-Anruf tätigen ( Hinweis : Für diese Lösung ist JQuery erforderlich):
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 wird ein Warnfeld angezeigt, das anzeigt, ob Cookies aktiviert sind oder nicht. Natürlich müssen Sie kein Warnfeld anzeigen. Von hier aus können Sie weitere Schritte unternehmen, um mit deaktivierten Cookies umzugehen.
quelle
JavaScript
Sie können ein Cookie mit JavaScript erstellen und prüfen, ob es vorhanden ist:
//Set a Cookie` document.cookie="testcookie"` //Check if cookie exists` cookiesEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false`
Oder Sie können ein jQuery Cookie-Plugin verwenden
//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.
quelle
Es ist leicht zu erkennen, ob die Cookies aktiviert sind:
Wenn Sie das von Ihnen gesetzte Cookie erhalten können, ist das Cookie
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 es nicht sehr häufig, dass Leute keine Cookies aktivieren möchten.quelle
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 alle Zeichen.
quelle
Cookies sind clientseitig und können mit PHP nicht ordnungsgemäß getestet werden. Das ist die Basis und jede Lösung ist ein Wrap-Around für dieses Problem.
Das heißt, wenn Sie nach einer Lösung für Ihr Cookie-Problem suchen, sind Sie auf dem falschen Weg. Verwenden Sie kein PHP, sondern eine Client-Sprache wie Javascript.
Können Sie Cookies mit PHP verwenden? Ja, aber Sie müssen neu laden, um die Einstellungen für PHP "sichtbar" zu machen.
Zum Beispiel: Ist ein Test möglich, um festzustellen, ob der Browser Cookies mit einfachem PHP setzen kann? Die einzig richtige Antwort ist "NEIN".
Können Sie ein bereits gesetztes Cookie lesen: 'JA' verwenden Sie das vordefinierte $ _COOKIE (eine Kopie der Einstellungen, bevor Sie PHP-App gestartet haben).
quelle