• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Cookies deaktiviert?

Willibergi

Mitglied
Moin,
ich möchte Daten per Cookie speichern, Chrome sagt mir aber, Cookies seien deaktiviert - sind sie aber nicht?!
Mein Quellcode
if(document.cookie){
alert("Cookies sind aktiviert.");
}else{
alert("Cookies sind deaktiviert!")
}

Es erscheint der alert mit "Cookies sind deaktiviert".
cookies.PNG
In den Chrome-Einstellungen sind sie aber eindeutig aktiviert.
cookies2.PNG
Was mache ich denn bitte falsch?
LG Willibergi
 
Werbung:
Alles Bestens bei deiner Seite. Cookies funktionierten einwandfrei.
cookie.PNG
Ich verstehe aber trotzdem nicht, wieso mein Script nicht funktioniert...
 
Werbung:
Hast dein Script mal nach dem Besuch meiner Seite aufgerufen oder dir mal meinen Code angesehen und adaptiert oder in deinem alert ergänzt alert(Text + document.cookie). Was anderes mache ich ja auch nicht.
 
Hier des Rätsels Lösung
Code:
    errText = (document.cookie) ? "OK" : "ERR";
    alert("1 - Cookie:" + document.cookie + ":\nResult:" + errText );
    document.cookie = "aaa=bbb";
    errText = (document.cookie) ? "OK" : "ERR";
    alert("2 - Cookie:" + document.cookie + ":\nResult:" + errText );
Dein IF wird nur true, wenn auch ein Cookie gesetzt ist
 
cookie2.PNG
Erst ein Error ...
cookie3.PNG
... dann ein Cookie.
Ein if(document.cookie){.....} prüft also nur, ob ein Cookie gesetzt ist und nicht, ob sie aktiviert sind?
 
Werbung:
Ein IF prüft, ob der Ausdruck wahr ist. Kommt darauf an, was der Ausdruck ist. Wenn es ein Objekt ist wie window.JSON, dann ist es wahr, wenn != null. Wenn es ein String ist, wie scheinbar window.cookie, dann muss es wohl != LEER sein. Ich kenne JavaScript nicht so gut, unter VB gab es auch bei Objekten einen Default-Property, die konnte man dann über den Objektnamen ansprechen, also so etwa in der Art x=window.cookie statt richtig und ausführlich window.cookie.value. Aber cookie ist in der Tat kein Objekt, sondern nur eine Property, siehe
http://www.w3schools.com/jsref/prop_doc_cookie.asp, sonst müsste man auch nicht eigene get/set Methoden schreiben, wie unter http://www.w3schools.com/js/js_cookies.asp
 
Nachtrag: Ich bin mir nicht sicher, ob du im Browser überhaupt feststellen kannst, ob Cookies aktiviert sind. Theoretisch könnte sich ja die Cookie-Property setzen lassen, aber nur bei aktivierten Cookies wird sie auch auf den Server übertragen. Wenn du das testen willst, dann deaktiviere Cookies und gehe nochmals auf meine Testseite und setze ein Cookie (was vermutlich geht). Anschließend gehe auf die Seite http://php.netaktiv.de/index.php?page=umgebung und prüfe unter $_COOKIE Variable, ob es tatsächlich auf den Server übertragen wird.
 
gehe nochmals auf meine Testseite und setze ein Cookie (was vermutlich geht).
Mehr oder weniger. Es kommt ne Exception, aber unter dem Formular steht Cookie gesetzt.
cookie4.PNGcookie5.PNG
Wenn ich jetzt auf die zweite Seite gehe, sind tatsächlich überhaupt keine Cookies gesetzt.
cookie6.PNG
Aber wenn ich in einer try-catch-Anweisung versuche, ein Cookie zu setzen, und es nicht funktioniert, kann ich doch davon ausgehen, dass der Nutzer seine Cookies deaktiviert hat, oder?
Also so:
try{
document.cookie = "testCookie=42";
}catch(e){
alert("Cookies sind deaktiviert!\n" + e);
}
 
Werbung:
Bin mir da auch nicht sicher, denn die Cookies können ja über relativ komplexe Regeln [de-]aktiviert werden, die von den Sicherheitsrichtlinien abhängen. Die Frage ist, ob der Browser das schon beim setzen der Property prüft, (was ich nicht so recht glaube), oder erst, wenn du einen Server Request absetzt und dann das Cookie entweder im HTTP Header mitschickt oder es unterbindet. Außerdem sind beide von mir diskutierten Implementierungen möglich und unterbinden, dass Infos an den Server gesendet werden. Wenn du das mit Browser A testest, dann heißt es noch lange nicht, dass der Browser B das identisch macht. Eigentlich kann er es beim Setzen nicht prüfen, denn dann weiß er ja noch nicht, an welchen Server der Request gehen wird.

Was ich in meinem Test mache ist, dass ich das Cookie setze und dann wieder auslese und unter Verschiedenes anzeige. Wenn es da angezeigt wird, dann wurde es auch gesetzt, trotz Fehlermeldung.
 
Nachtrag: Der Fehler sagt auch, dass die LocalStorage Property nicht gelesen werden konnte, nicht aber die Cookies. Ich würde vorschlagen, dass du deinen eigenen Testcode schreibst, sonst kommen bei der Nutzung meiner Scripts unerwünschte Seiteneffekte.
 
Werbung:
Wenn du fertige Erkenntnisse hast, dann solltest die hier wieder publizieren, dann sparen sich andere die Arbeit. Ich weiß auch immer gerne, wie es ausgeht :)
 
Wenn du fertige Erkenntnisse hast, dann solltest die hier wieder publizieren, dann sparen sich andere die Arbeit. Ich weiß auch immer gerne, wie es ausgeht :)
Letzendlich habe ich es so gelöst:
var cActive = Navigator.cookieEnabled;
Dann frage ich mit einer if-Abfrage den Wert von cActive ab - wenn er true ist, sind Cookies aktiviert, wenn er false ist, dann nicht. Wenn er weder true noch false ist, gibt's nen Fehler. (Sollte aber nicht passieren, habe es in IE11, Microsoft Edge 25, Google Chrome 48, Mozilla Firefox 43 und Opera 34 getestet)
LG Williibergi
 
Ahhh jetzt wo man es weiß (oder wieder entdeckt hat) hättest es auch auf meiner Seite http://php.netaktiv.de/index.php?page=browser beim Navigator-Objekt sehen können. Aber mein Professor an der Uni sagte immer Wenn man aus der Kirche nach Hause geht ist man schlauer als beim Reingehen. Jaja hinterher ist es immer leicht zu sagen, wie man es hätte schneller oder einfacher machen können.
 
Werbung:
Zurück
Oben