hawkmaster: Cookie Namen auslesen?

Hallo zusammen,
ich versuche mich gerade mit Cookies lesen und schreiben.
In einem Cookie schreibe ich nacheinander folgendes:

TestID[33]=Wert1;
TestID[453]=BlaBla;

Die Cookie Namen sind also immer in der Schreibweise "TestID[]".
In der eckigen Klammer sind immer Zahlen enthalten.

Folgende Funktion habe ich mit meinen bescheidenen JS Kenntnissen hinbekommen. Diese prüft ob es einen Cookie Namen schon gibt.
Im Beispiel also "Test"
Das klappt soweit.

Wie aber könnte ich alle Cookies ermitteln die mit "TestID[]" beginnen?
Muss man hier mit regulären Ausdrücken arbeiten oder gibt es einfachere Lösungen?

Bin für jeden Tipp dankbar.

checkCookieName(Test);

  
function checkCookieName(name) {  
  if (document.cookie) {  
   CookiesAll=document.cookie;  
   cookieArr=CookiesAll.split(" ");  
   for(var i=0;i<cookieArr.length;i++)	{  
    if(cookieArr[i].split("=")[0] == name){  
	//alert('Cookie ' + name + ' ist bereits vorhanden!');  
	return cookieArr[i].split("=")[1];  
    }  
  
   }//for  
}//function  
  

vielen Dank und viele Grüße
hawk

  1. Wie aber könnte ich alle Cookies ermitteln die mit "TestID[]" beginnen?
    Muss man hier mit regulären Ausdrücken arbeiten

    Ja, z.B. so:
    if (/^TestId[\d+]$/.test(cookieName)) {
       alert(cookieName + " entspricht dem Schema");
    }

    oder gibt es einfachere Lösungen?

    Ich würde mit einem Cookie arbeiten und die ganzen Namen-Wert-Paare in einem Object speichern:

    var obj = {
       '33' : 'Wert1',
       '453' : 'BlaBla'
    };

    Das serialisierst du dann mittels JSON und schreibst es in den Cookie. Beim Auslesen wird der Cookie-Wert wieder in ein Object umgewandelt. obj[33] liefert dir dann wieder den 'Wert1'.

    Mathias

    1. Hallo Mathias,

      vielen Dank für deine Hilfe.
      Da ich wohl mit der zweiten Lösung noch etwas überfordert bin, habe ich es mal mit deinem ersten Vorschlag versucht.

      Ja, z.B. so:
      if (/^TestId[\d+]$/.test(cookieName)) {
         alert(cookieName + " entspricht dem Schema");
      }

      In der Session steht z.b.
      TestID[5]=Hallo%A7%A7%A77@@@Heute; ZDEDebuggerPresent=php,phtml,php3; PHPSESSID=caf2007df7f93ccb31696bed4cbbdf76

      Wenn ich nun folgendes versuche:

        
      if (document.cookie) {  
      alert(document.cookie);  
      var str = document.cookie;  
      var reg = /^TestID\[\d+\]$/;  
      if (reg.exec(str)) {  
      alert(cookieName + " entspricht dem Schema");  
      }  
      }  
      
      

      Wird nichts gefunden?

      vielen Dank und viele Grüße
      hawk

      1. var str = document.cookie;
        var reg = /^TestID[\d+]$/;
        if (reg.exec(str)) {

        Wird nichts gefunden?

        Ja, weil ich dir einen Ausdruck gegeben habe, der nicht auf document.cookie, sondern den Cookienamen angewendet werden soll. Denn schließlich willst du nicht einfach prüfen, ob document.cookie einfach nur irgendwo das Schema TestId[X] enthält, sondern alle Cookies mit diesem Namen suchen. (Wenn ich dich recht verstanden habe.)

        An die Cookies kommt man, indem man document.cookie mittels »;« trennt und die Resultate dann wieder mittels »=«. Wenn du mal nach getCookie oder ähnlichem suchst, wirst du viele Fertigfunktionen dafür finden.

        Mathias

        1. Hallo nochmals,

          ich habe mir mal ein Beispiel auf php.net angeschaut wie man ein Cookie Array speichern kann.

          http://de.php.net/setcookie

            
          // Setzen der Cookies  
          setcookie ("cookie[three]", "cookiethree");  
          setcookie ("cookie[two]", "cookietwo");  
          setcookie ("cookie[one]", "cookieone");  
            
          // Nach dem Neuladen der Seite wieder ausgeben  
          if (isset($_COOKIE['cookie'])) {  
              foreach ($_COOKIE['cookie'] as $name => $value) {  
                  echo "$name : $value <br />\n";  
              }  
          }  
            
          
          

          Der Php Code ist mir soweit klar. ICh kann das Cookie über den "array" Namen "cookie" ansprechen und mi foreach durchlaufen.

          Gibt es sowas auch in Javascript?
          Angenommen ich könnte mir alle Cookie Namen ausgeben lassen.
          Kann ich dann per JS auch das Cookie Array über "cookie" ansprechen?
          Gibt es hier etwas wie "as $name => $value" also um den Key und den Wert herauszufinden?

          vielen Dank und viele Grüße
          hawk

          1. Gibt es sowas auch in Javascript?

            Nur wenn man sich eine entsprechende Helferfunktion definiert.

            Kann ich dann per JS auch das Cookie Array über "cookie" ansprechen?

            document.cookie ist immer ein String mit allen Cookies, wenn du einen Array (genauer gesagt ein Hash, in JavaScript ist das ein Object, kein Array) haben willst, dann musst du dir mithilfe von document.cookie einen solchen anlegen.

            Gibt es hier etwas wie "as $name => $value" also um den Key und den Wert herauszufinden?

            Wenn document.cookie aufgetrennt hat und ein entsprechenden Hash angelegt hat, kann man den mit for-in durchlaufen.

            function getAllCookies() {  
            	var cookiesO = {}, splitted = document.cookie.split(/;\s*/), cStr, dividerPos, cName, cValue;  
            	for (var i = 0; i < splitted.length; i++) {  
            		cStr = splitted[i];  
            		dividerPos = cStr.indexOf("=");  
            		cName = cStr.substr(0, dividerPos);  
            		cValue = cStr.substr(dividerPos + 1);  
            		cookiesO[cName] = cValue;  
            	}  
            	return cookiesO;  
            }  
              
            var allCookies = getAllCookies();  
            for (var cName in allCookies) {  
                if (cName.test(/^Test\[\d+\]$/)) {  
                    alert(cName + " : " + allCookies[cName]);  
                }  
            }
            

            Mathias

            1. Hallo Mathias,

              vielen herzlichen Dank nochmals für deine Hilfe.
              So ähnlich habe ich es jetzt auch hinbekommen. Dank deines regulären Ausdrucks.
              Ich dachte nur zuerst man könnte vielleicht per JS das Cookie auch so ansprechen wie es PHP macht. Hier kann ich ja gezielt mit $_COOKIE['cookie']
              alle dazugehörigen Werte als Array ansprechen.
              Aber ist klar, eigentlich steht ja im Cookie alles als String drin.

              vielen Dank und viele Grüße
              hawk