Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

cookie problem mit JS

Empfohlene Antworten

Veröffentlicht

Hallo Leute,

ich habe hierein kleines Problem mit meinen Cookies und Javascript.

Ich habe eine Sprachauswahl und wenn ich eine Sprache ausgewählt habe, wird der cookie gesetzt. wenn ich das nächste mal auf die Seite komme, soll er mich gleich zu der deutsche seite weiterleiten und nicht erst nach der Sprache fragen. Das problem ist aber, das die Seite beim Einloggen, vor der Sprachauswahl schon einen Cookie setzt. Ich hab schon etliches ausprobiert, komme aber zu keiner lösung.

Mein Quelltext dazu sieht so aus:


CookieName= "language";


function getCookie(name){

var cname = name + "="; 

var dc = document.cookie; 

if (dc.length > 0){ 

begin = dc.indexOf(cname); 

if (begin != -1){

begin += cname.length; 

end = dc.indexOf(";", begin); 

if (end == -1) end = dc.length; 

return unescape(dc.substring(begin, end)); 

}

}else{return null;

}

}


function init(){

if(document.cookie){

if(getCookie("language")=="german"){

window.location.href = "../index/de.htm";

}

if(getCookie( "language")=="english"){

window.location.href = "../index/en.htm";

} else{

document.write("else");

window.location.href = "lang_select.htm";

}

}else{

window.location = "lang_select.htm";

}

}

Achso, ich habe vergessen zu erwähnen, dass ich immer auf dieser Sprachauswahl lande, obwohl ein cookie gesetzt ist.

Kann es sein, dass es bei english geht und bei deutsch nicht?

Übrigens Deine Code-Formatierung ist grauenhaft.

Gewöhne Dir bitte an, Deinen Code zu formatieren.

Dann hättest den Fehler wahrscheinlich selbst gesehen:

CookieName= "language";


function getCookie(name){

	var cname = name + "="; 

	var dc = document.cookie; 

	if (dc.length > 0)	{ 

		begin = dc.indexOf(cname); 

		if (begin != -1){

			begin += cname.length; 

			end = dc.indexOf(";", begin); 

			if (end == -1) end = dc.length; 

			return unescape(dc.substring(begin, end)); 

		}

	}else{

		return null;

	}

}


function init(){

	if(document.cookie){

		if(getCookie("language")=="german"){

			window.location.href = "../index/de.htm";

		}

		[B][COLOR="Red"]else [/COLOR][/B]if(getCookie( "language")=="english"){

			window.location.href = "../index/en.htm";

		} else{

			document.write("else");

			window.location.href = "lang_select.htm";

		}

	}else{

		window.location[COLOR="Red"].href[/COLOR] = "lang_select.htm";

	}

}

Soweit ich weiss, ist das doch übrigens: window.location = ..., oder???

Bearbeitet von VaNaTiC

Kann es sein, dass es bei english geht und bei deutsch nicht?

Nein keins von beiden geht auch mit dem Veränderten Quelltext jetzt nicht.

Soweit ich weiss, ist das doch übrigens: window.location = ..., oder???

Jein, es gibt viele möglichkeiten. Und diese möglichkeit funktioniert auch.

Übrigens Deine Code-Formatierung ist grauenhaft.

Gewöhne Dir bitte an, Deinen Code zu formatieren.

Ja das stimmt, das tut mir leid. das kam weil ich es direkt aus dem cms rauskopiert habe und der nimmt es halt unformatiert.

Naja leider funktioniert es immernoch nicht. Ich lande immernoch auf der Seite mit der Sprachauswahl. :(

OK, hast Du Dir schonmal mit alert(...) das Cookie angeguckt?

Wo springt er denn konkret raus? window.location = durch ein alert() ersetzen.

Wo und wie setzt Du denn das cookie? Kannst Du das im Browser-Cache lokalisieren? Unter Opera kann man sich die Cookies angucken.

Er geht in der erste if-Abfrage rein also

if(document.cookie){}

und springt da wo ich das document.write(else) geschrieben habe raus.

Den cookie kann ich auch mit Firefox angucken, da steht:

Name:language

Wert:german

Host:xxx

Pfad:/produktion/publicity/franchise.nsf/frames/

Senden für:Jeden Verbindungstyp

Gültig bis:Freitag, 12. März 2010 15:20:04

Das cookie setze ich, wenn ich einer der beiden Links, also einer der beiden Spracken angelickt habe. Jenachdem steht im Cookie unter wert dann halt english oder german.

das mit dem setzen klappt ja auch wunderbar.

Dann muss der Fehler in Deiner Funktion getCookie() sein, so dass diese eben nicht den Text zurückliefert den Du erwartet würdest.

Mach mal ein paar alert()'s zum Testen in die getCookie()-Funktion.

Zum Beispiel was tatsächlich in document.cookie drin steht, wenn die Funktion ausgeführt wird.

So, ich habe jetzt rausgefunden das die variable begin ein -1 zurückliefert.

Kann mir einer sagen warum das so ist.

Deswegen kommmt er ja nicht in die nächste schleife rein.

Du geizt extrem mit Informationen, was zur Laufzeit in welchen Variablen drin steht :D

So kann Dir im Detail leider keiner helfen.

Bitte schreib doch was in document.cookie drin steht, dann kann ich Dir auch sagen, warum der Dir -1 liefert. Aber wahrscheinlich siehst das dann selbst :)

In dem Cookie steht der wert des anderen cookies drinne.

1DomAuthSessId=C01D72494FFCE464845B56D835B68C7D

Wiesoooooooo?

Ich möchte doch den andern Cookie auslesen.

Hmm, Du erwartest, dass getCookie("language") den text "german" oder "english" zurückliefert.

Wenn ich nun in getCookie() schaue, dann prüfst Du korrekt ob document.cookie überhaupt da ist.

Dann ob Länge > 0 ist, auch ok.

Dann holst Du die Position im Text wo "language=" vorkommt.

Und das liefert Dir -1, also nicht vorhanden.

Das bedeutet, das ist nicht im Text. Deswegen frage ich, was alert(document.cookie) überhaupt anzeigt. Weil die Vermutung nahe liegt, dass es eben nicht "language=" ist!

Wenn in document.cookie nur "1DomAuthSessId=C01D72494FFCE464845B56D835B68C7D" drin steht, dann schreibst Du Deinen Cookie nicht richtig.

Dann kann er aber auch nix finden.

Meinen Cookie zum setzen habe ich folgendermaßen geschrieben:

var timeToLive = new Date();

timeToLive = new Date(timeToLive.getTime() +1000*60*60*24*365);

document.cookie = "language=german; expires=" + timeToLive.toUTCString()+";";

Verstehe ich das richtig, wenn ich 2 cookies habe durchsucht er beide. Und er gibt mir weil der cookie falsch gesetzt ist nur den einen wert zurück? Oder durchsucht er nur den einen Cookie der z.B zuerst gesetzt wurde?

Also wenn ich das ganze offline teste funktioniert es wunderbar, das liegt denke ich daran das da halt kein zweiter cookie vorhanden ist. Anders kann ich mir das nicht erklären.

Bearbeitet von Michaela1991

Hmm, sieht prinzipiell gut aus, aber fakt ist dass beim Aufruf von getCookie() was anderes im Cookie steht.

Ich vermute daher, dass an anderer Stelle der Cookie überschrieben wird.

Kannst Du das ausschliessen oder prüfen?

Nein leider gibt es noch nichts neues :(

Hab den fehler immernoch nicht gefunden.

Ich weis nur das beim auslesen der Cookies nur der eine gelesen wird.

Wenn ich was neues weis, werde ich mich melden :)

Irgendwie habe ich verstgestellt, dass wenn ich eine Sprache ausgewählt habe und weitergeleitet wurde, ein cookie gesetzt ist, bzw. wird.

Wenn ich jetzt aber wieder auf die Hauptseite gehe auf der ich entsprechend ob ein cookie gesetzt ist oder nicht weitergeleitet werde, werdeich immer wieder auf die Sprachauswahl geleitet, weil der cookie weg ist. Woran kann das liegen? Also die Haltbarkeit des Cookie kann es ja nicht sein, weil die ist ja auf ein Jahr gesetzt.

Weis jemand Rat?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.