Ergebnis 1 bis 6 von 6

Thema: Java Skript - Cookie wird nicht neu gesetzt

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Java Skript - Cookie wird nicht neu gesetzt

    Aloha Programmierforum,

    ich komme momentan mit einem Problem absolut nicht weiter. Ich arbeite momentan mit Cookies. Ich lasse Werte in ein Cookie schreiben und will diese sowohl verändern als auch auslesen lassen.
    Die Cookie sind dabei wie folgt aufgebaut:

    Code:
     attribut=wert1°wert2°expires=date; attribut2=wert1°wert2°expires=date
    Heisst also das Semikolon ist der Delimiter für die Attribute und das ° wiederum für die einzelnen Werte des Attributs.
    Klingt soweit nicht weiter wild. Dachte ich auch. Bis folgendes passierte:

    In der folgenden HTML Datei setze ich 2 Attribute mit jewals 2 Werten.
    Das lasse ich mir in einem Popup ausgeben.
    Danach versuche ich in beiden Cookies jewals einen Wert zu ersetzen. Danach gebe ich den Inhalt des Cookies wieder aus.

    HTML-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Cookie Test</title>
    <script type="text/javascript" src="CookieUtil.js"></script>
    </head>
    <body>
    
    <script type="text/javascript">
    // Cookiedaten schreiben
    var date = new Date();
    date.setTime(date.getTime() + 60000);
    addCookieAttr("test","1°String1°", date);
    addCookieAttr("test2","2°String2°", date);
    
    // Cookiedaten zeigen vor Manipulation
    alert("Cookieinhalt: "+document.cookie);
    
    // Cookiedaten veraendern
    replaceCookieAttrValue("test","String1","String_1");
    replaceCookieAttrValue("test2","String2","String_666");
    
    //Cookiedaten zeigen
    document.write(document.cookie);
    </script>
    
    
    </body>
    </html>
    Das interessante ist nun, es lassen sich immer nur Werte des ersten Attributs ändern. Nie einer danach. Also fing ich an zu testen und habe das ganze bis zu einem Punkt aufgeschlüsselt an dem ich nicht mehr weiter weiss. Das ist die Funktion die die Ersetzungen durchführen soll:

    Code (javascript):
     
    /**
     * Ersetzt den Wert eines Attributes durch einen uebergebenen Wert.
     * @param name Der Name des Attributes
     * @param searchedAttr Der Wert im Attribut der ersetzt werden soll
     * @param replaceAttr Der Wert der den alten ersetzen soll
     * @return Gibt 1 zurueck falls die Ersetzung erfolgreich war, ansonsten -1
     */
    function replaceCookieAttrValue(name,searchedAttr,replaceAttr){
    	var retVal = -1;
     
    	if(name){	
    		var cookieContent = getCookieAttrValue(name); // Sich das Attribut holen, in dem ein Wert ersetzt werden soll
    		var replaceString = cookieContent.replace(searchedAttr,replaceAttr); // Den Wert ersetzen
     
    		if(cookieContent.search(replaceString) == -1){ // Ueberpruefen ob die Ersetzung erfolgreich war
    			retVal = 1;
    			alert("Replacestring: "+replaceString); // Debug wie der String zum ersetzen aussieht
    			alert("Replace: "+document.cookie.replace(cookieContent , replaceString)); // Was gibt die Funktion zurueck die ersetzen soll?
    			document.cookie =  document.cookie.replace(cookieContent , replaceString); // Hier soll die Ersetzung auf das Cookie angewand werden
    		}		
    	}
     
    	return retVal;	
    }
     


    Dieser Code funktioniert wie gesagt wunderbar solange man es auf Werte des ersten Attributs anwendet. Bei jedem darauffolgenden geht es simpel nicht.
    Das interessante hierbei ist wirklich das man in der Debugausgabe sieht das der replaceString aufs haar genau den richtigen String enthält. Bei der Zeile an der dem Cookie jedoch der neue Wert zugewiesen werden soll happert es. Wie kann das jedoch bei einer Zuweisung der Fall sein? Beachte ich da irgendeine Eigenart von JS nicht? Das Problem taucht übrigens im IE6 ( dem Browser in dem es funktionieren soll ) als auch im aktuellsten Firefox auf.
    Vorallem aber, warum funktioniert es beim ersten Attribut so problemlos?


    Die anderen zwei Funktionen die hier für eine Rolle spielen.
    Diese zwei tun allerdings soweit das was sie tun sollen. Sind also eher der Verständnis halber mit dabei.

    Code (javascript):
    var valueDelimiter = '°', attributDelimiter = ';';


    Code (javascript):
     
    /**
     * Setzt ein neues Attribut mit einem Wert in dem Seitencookie.
     * @param name Der Name des Attributes
     * @param value Der Wert des Attributes, mehrere Werte sind moeglich muessen aber durch den 
     * Delimiter '°' getrennt werden. z.B.: "wert1°wert2°"
     * @param expires(optional) Ein UTC-Date als String, beschreibt die Lebensdauer des Cookies
     */
    function addCookieAttr(name,value,expires){
    	var cook = name + '=' + value;
    	cook += (expires) ? "expires=" + expires + attributDelimiter : "";
     	document.cookie = cook;
    }
     


    Code (javascript):
     
    /**
     * Liefert den Wert eines Attributes.
     * @param name Der Name des Attributes
     * @return Den Wert des Attributes, der Inhalt kann Einzelwerte besitzen die durch den Delimiter '°' 
     * getrennt sind. z.B.: "wert1°wert2°" Liefert null zurueck wenn kein Wert gefunden wurde.
     */
    function getCookieAttrValue(name){
    	var retVal = "", searchString = name + '=', startIndex = document.cookie.search(searchString);
     
    	if(startIndex != -1){		
    		startIndex += searchString.length;
     
    		// Attribut ausschneiden lassen
    		var endIndex = document.cookie.indexOf(attributDelimiter,startIndex);
    		if(endIndex == -1) endIndex = document.cookie.length;
    		var content = document.cookie.substring(startIndex,endIndex);
     
    		// Wert im Attribut ausschneiden
    		endIndex = content.lastIndexOf(valueDelimiter);
    		retVal = content.substring(0 , endIndex + 1);
     
    	}else{
    		retVal = null;
    	}
    	return retVal;
    }  
     


    Wer mir helfen möchte, wird sicherlich selbst probieren wollen.
    Aus dem Grund hier die zwei Dateien die ich hier benutze.
    [Klick mich]

    Hoffe jemand weiß da Rat.

    Geändert von makenshi (29.11.2009 um 03:08 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •