daniel: cookie-array kann nur 20 werte speichern ?

hallo alle zusammen,

ich habe da ein kleines problem auf das ich mir keinen rechten reinm machen kann.

aus einer liste mit immobilien kann man sich einzelne "rauspicken" deren ID's dann in einem cookie gespeichert werden und auf einer seite gesammelt angezeigt werden sollen.

das klappt auch alles wunderbar, nur können irdenwie nicht mehr als 20 objekte gespeichert werden. danach wird das erste objekt in dem cookie-array überschrieben... und ich hab keine idee, wiso?

ne browser-sache kanns eigentlich nicht sein, da MSIE und moz beide dasselbe problem haben...?

das ist die seite, auf der man die objekte seiner favoritenliste hinzufügen kann (also auf der sie im cookie abgelegt werden):

http://halla.homelinux.net/pages/objects/?go=finca&lang=2

angezeigt wird diese liste dann hier (sofern man min. ein objekt ausgesucht hat:

http://royal/pages/objects/?go=favorites&lang=2

der code dazu sieht folgendermaßen aus:

/* Make an Array with all Values to be stored in the cookie */ if($cookie_exist) {  $cookievalues = $_COOKIE[$cookiename]; } else {  $cookievalues = array(); }

/* push ID ('refnr') into array with values for cookie */ if(!in_array($_GET['refnr'],$cookievalues)) {   array_push($cookievalues,$_GET['refnr']);  }

/* Set Cookie with Values */ function set_royal_cookie($cookievalues,$expire,$cookiename) {   foreach ($cookievalues as $key => $value) {          setcookie($cookiename."[".$key."]",$value,time()+$expire,"/");   }  }

eigentlich ne ganz einfache sache - dachte ich zumindest. bis ich über diesen ominösen fehler gestolpert bin. kann mir da jemand auf die sprünge helfen?

vielen dank für eure hilfe !!

grüße, daniel

  1. Moin!

    das klappt auch alles wunderbar, nur können irdenwie nicht mehr als 20 objekte gespeichert werden. danach wird das erste objekt in dem cookie-array überschrieben... und ich hab keine idee, wiso?

    Die in einem Cookie speicherbare Datenmenge ist begrenzt. 4 Kilobyte je Domain waren es, wenn ich mich richtig erinnere. Nun scheinen IDs keinesfalls diese Grenze zu erreichen, aber auch die Zahl der Cookies ist begrenzt - kann durchaus sein, dass nur 20 Stück erlaubt sind, unabhängig davon, wieviel sie an Bytes einnehmen.

    Es ist schlauer, wenn du einen Session-Mechanismus einsetzt und die gewünschten IDs auf dem Server speicherst (in $_SESSION statt in $_COOKIE). Da kannst du ohne wirkliche Begrenzung Daten speichern, wie du willst.

    - Sven Rautenberg

    1. hi,

      Es ist schlauer, wenn du einen Session-Mechanismus einsetzt und die gewünschten IDs auf dem Server speicherst (in $_SESSION statt in $_COOKIE). Da kannst du ohne wirkliche Begrenzung Daten speichern, wie du willst.

      ja, da hast du sicher recht. aber eine session hat einen gravierenden nachteil: ich kann die daten nicht über einen definierten zeitraum speichern - z.B. mehrere tage (korrigier mich, wenn ich mich irre). daher der weg über die cookies.

      eine andere alternative könnte vielleicht noch das speichern in form eines stings sein, oder? also einfach nur ein wert im cookie, in dieser form:

      V121:V123:V31:F533:H211:Z111:M321:J123 usw.....

      und die werte dann per exploder() weiterverarbeiten.... müßte auch funktionieren, oder?

      1. Hello,

        Du musst Deine Session-Dateien nicht löschen. Man kann den Mechanismus auch abschalten. Allerdings wird die Platte dann bei vielen Besuchern bald überlaufen. Und wewnn der User dann seine Cookies nicht löscht, wird er in der Session wieder aufsetzen, wo er sie verlassen hat.

        Eine bessere Lösung ist da sicherlich die Authentifizieung (Login) des Users. Jemand, der einen Service in Anspruch nehmen will, wird das auch akzeptieren. Man kann es ja trotzdem anonym halten. Email und Password reichen schließlich aus.

        Und dann können die daten dort gespeichert werden, wo sie hingehören, in einer Datenbank. Die Sessiondatei sollte man dagegen nur als erweiterteten Arbeitsspeicher ansehen.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
          Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
          Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. hi tom,

          das mit dem login ist leider nicht drin. der kunde will es nicht haben, und die sache so für den besucher so einfach wie nur irgendwie möglich sein.

          die seite ist ziemlich stark frequentiert (gibt z.Zt. noch eine alte statische version davon die heftig besucht ist) und da will ich lieber die finger von den sessions lassen....

          gegen einen string der die Ref-Nr mit trennzeichen separiert vorhält, sollte es eigentleich kein k.o.-argument geben, oder übersehe ich da was?

          grüße, daniel

      2. Hallo Daniel

        aber eine session hat einen gravierenden nachteil:
        ich kann die daten nicht über einen definierten zeitraum speichern - z.B. mehrere tage (korrigier mich, wenn ich mich irre).
        daher der weg über die cookies.

        Ich versteh nicht so ganz, warum du dich gegen eine Verwendung von Session sträubst. Du hast doch eigentlich nichts anderes vor und die Session-Lösung ist da bestimmt der elegantere Weg. Da du ferner eh davon ausgehst, das deine Besucher Cookies aktiviert haben, kannst du dir doch das Session_Cookie zu Nutze machen um dein "Zeitproblem" zu steuern.

        Ergänzend zu Sven wollte ich noch anmerken, das man max. 20 Cookies pro Domain setzen kann. Das sollte dann auch erklären, warum dir das erste überschrieben wird.

        Gruß
        Oliver

    2. Hi,

      kann durchaus sein, dass nur 20 Stück erlaubt sind, unabhängig davon, wieviel sie an Bytes einnehmen.

      Steht auch in der PHP-Dokumentation ein Link dazu: http://www.netscape.com/newsref/std/cookie_spec.html

      There are limitations on the number of cookies that a client can store at any one time. This is a specification of the minimum number of cookies that a client should be prepared to receive and store.
       - 300 total cookies
       - 4 kilobytes per cookie, where the name and the OPAQUE_STRING combine to form the 4 kilobyte limit.
       - 20 cookies per server or domain. (note that completely specified hosts and domains are treated as separate entities and have a 20 cookie limitation for each, not combined)

      E7