[JS] Cookies mit bestimmten Namen auslesen **erledigt**

strolch00

redraft.de
ID: 155297
L
21 April 2006
1.684
72
Hi @all,

also diesmal besteht meine Frage darin wie ich einen cookie mit bestimmten Namen per JS checken kann.

Folgenden Tastcode habe ich mal gemacht:
HTML:
function gastRequest()
{
   document.cookie = "Name=Test1";
   document.cookie = "Hallo=Test2";
   alert(document.cookie);
}

Jetzt zeigt mir aber das alert sämtliche irgendwann mal gesetzten Cookies von der Domain an. Das heist wirklich alle von irgendwelchen Subdomains usw. Ich kann ja net für mehrere Subdomains immer verschiedenen Namen nehmen.

Also begriffen habe ich schonmal das die erste Angabe im document.cookie String der Cookie name ist und danach kommt der String den er speichern soll. Hoffe man das ich mir das so richtig zusammengereimt habe.

Danke schonmal

gruß strolch00

*edit
Da hier niemand schreibt scheint es wohl nicht möglich zu sein deswegen habe ich mal versucht mir die beiden Funktionen selber zu schreiben:
PHP:
/* imitate the setCookie Funktion from PHP use */
function setCookie( name, value, expires )
{
   if(typeof(expires) == 'undefined')
      expires = null;
   else
   {
      var ex = new Date();
      expires = ex.getTime() + (expires * 24 * 60 * 60 * 1000);
   }

   /* cookies exists */
   if(document.cookie)
   {
      var c = document.cookie;

      if(c.indexOf(name) != c.lastIndexOf(name))
      {
         alert('Fehler bitten melden Sie das dem Support.\n Vielen Dank');
      }
   }

   if(expire == null)
      document.cookie = name + '=' + value;
   else
      document.cookie = name + '=' + value + '; expires=' + expires.toGMTString();
}

/* imitate the $_COOKIE vars from PHP use */
function readCookie( name )
{
   //if(!document.cookie || document.cookie.indexOf( name ) == -1)
      //return false;

   var c = document.cookie;
   var cookies = c.split(';');
   var cLength = cookies.length;
   if(cLength > 1)
   {
      var i = 0;
      while(i < cLength)
      {
         cookies[i]['value'] = cookies[i].split('=');
         alert(cookies[i]['value']);
         i++;
      }
   }
}

Jedoch funktioniert das nicht wo der Alert steht. Ob das setzen funktioniert weiß ich noch net aber meiner Meinung nach schaut das soweit iO aus.
Aber im Alert in der while sagt er immer undefined. Wie kann denn sowas sein? Ein Alert auf cookie zeigt mir den Namen=value also string soweit ich weis.

*edit2
PHP:
/* imitate the $_COOKIE vars from PHP use */
function readCookie( name )
{
   //if(!document.cookie || document.cookie.indexOf( name ) == -1)
      //return false;

   var c = document.cookie;
   var cookies = c.split(';');
   var cLength = cookies.length;
   if(cLength > 1)
   {
      var i = 0;
      while(i < cLength)
      {                 alert(typeof(cookies[i].split('=')[1]));
         cookies[i]['v'] = cookies[i].split('=');
         //alert(cookies[i]['v']);
         i++;
      }
   }
}

So sagt mir das erste allert mit [0] und [1] am ende das es ein String ist, aber ich schaffe es einfach net das Ding zu speichern. Irgendwas mache ich anscheinend verkehrt. Und ohne typeof() stehen bei [0] am ende auch wirklich die Cookienamen drin. Ich bin total ratlos. Hoffe einer von euch weis was los ist ich bau an dem Ding schon 5 Stunden und komm net wirklich weiter. Wenn das daran liegt das man den vorhanden cookies array nicht ändern kann, verstehe ich net warum es mit einem neuen array names values nicht klappt. Firebug meckert irgendwie auch net rum.
 
Zuletzt bearbeitet:
aktuelles Problem

So mal nen 2. Post bevor der erste zu undurchsichtig wird.

Ich habe jetzt meinen Denkfehler glaube ich gelöst, bzw. umgangen weil der erste Weg ein sinnloser Schritt gewesen wäre.

Jetzt ist folgendes. Wie man sieht ist in der while eine return Anweisung. Diese greift aber nicht weil irgendwie die Bedingung falsch zu sein scheint.

ich habe mit
PHP:
alert(typeof(copy)) ==> object
alert(typeof(copy[0])) ==> string
alert(copy[0]) ==> Cookiename(entspricht den Funktionsaufruf = Name)
alert(typeof(copy[1])) ==> string
alert(copy[1]); ==> Cookievalue


gecheckt.

Vielleicht kann mir einer sagen war ich verkehrt mache.
Meine aktuelle Funktion:
PHP:
/* imitate the $_COOKIE vars from PHP use */
function readCookie( name )
{
   //if(!document.cookie || document.cookie.indexOf( name ) == -1)
      //return false;

   var cookies = document.cookie.split(';');
   var cLength = cookies.length;
   if(cLength > 1)
   {
      var i = 0;
      while(i < cLength)
      {
         var copy = cookies[i].split('=');
         if(copy[0] == name)
            return copy[1];

         i++;
      }
   }
}
Das alert um den funktionsaufruf bringt mir, weil die if nicht greift immer undefined. Funktionsaufruf erfolgt mit
PHP:
alert(readCookie('Name'));
und wenn ich das if auskommentiere funzt es wunderbar dann leifert mir die funktion das erste cookie value back.

*edit
Wenn ich mich undeutlich ausdrücke oder mein Code voll bekloppt ist sagt es bitte E,rklärungen kann ich jederzeit geben warum ich was gemacht habe (wobei ich stolz drauf bin nach 8 Stunden und ewig selfhtml JS Objectreferenz lesen) :mrgreen:

*edit2
So ich bins nochmal also das Probleme habe ich anscheined selbst lösen können, also das Cookievalue wird nu gefunden (nur nen ganz simples Zeichen hat gefehlt).

Jetzt wollte ich die setCookie Funktion noch ein wenig verbessern mit path und secure usw. Jetzt bekomme ich aber immer folgenden Error von Firebug:
expires.toGMTString is not a function
setCookie("TestsetCookie", 1, 1173690730296, "/", "/redraft", true)lib_js.js (line 183)
[Break on this error] cookieString += '; expires=' + expires.toGMTString();

Wie man aber sehen kann sollte die Schreibweise stimmten, zumnidest stand das so auf selfHtml in der Object Referenz.
Was könnte der damit meinen?
*edit zu edit 2
hier ist noch der Code den habe ich ganz vergessen:
PHP:
/* imitate the setCookie Funktion from PHP use */
function setCookie( name, value, expires, path, domain, secure )
{
   if(typeof(expires) == 'undefined')
      var expires = null;
   else
   {
      var ex = new Date();
      expires = ex.getTime() + ( parseInt(expires) * 24 * 60 * 60 * 1000);
   }

   if(typeof(path) == 'undefined')
      var path = null;
   if(typeof(domain) == 'undefined')
      var domain = null;
   if(typeof(secure) == 'undefined')
      var secure = null;

   /* cookies exists */
   if(document.cookie)
   {
      var c = document.cookie;
      if(c.indexOf(name) != c.lastIndexOf(name))
         alert('Fehler bitten melden Sie das dem Support.\nVielen Dank');
   }

   var cookieString = name + '=' + escape(value);
   if(expires != null)
      cookieString += '; expires=' + expires.toGMTString();
   if(path != null)
      cookieString += '; path=' + path;
   if(domain != null)
      cookieString += '; domain=' + domain;
   if(secure != null)
      cookieString += '; secure';

   alert(cookieString);
}
//test
setCookie('TestsetCookie', "1#7'\/", 2, '/', '/redraft', true);
 
Zuletzt bearbeitet: