Andavos: Session wird unter Firefox nicht gespeichert

Hallo,
auch wenn ihr alle sagt:
"Ach quatsch, das Session System ist Browserunabhänig!",
so bitte ich euch, mein folgendes Problem durchzulesen, denn es scheint nicht so zu sein.

Also es handelt sich um folgende Datei: <www.php-einfach.de/main.zip>

Wenn ihr auf http://forum.php-einfach.de geht, dann seht ihr vor den Kategorien (Programmierung, Scripts etc.) immer so ein Minus-Zeichen.
Dahinter verbirgt sich ein Link, der die Kategorie ausblenden soll.
Mit dem Internet Explorer funktioniert dies ohne Probleme, aber bei Firefox geht dies nicht.
Das Problem habe nicht nur ich, sondern auch andere Personen.
Falls es bei euch mit Firefox doch geht, bitte bescheid sagen.

Also wenn man jetzt auf den Link klickt, wird folgender Script aktiviert:

  
<?php  
//Wird aufgerufen beim Klick auf Plus/Minus Zeichen  
if($was == "closekt")  
   {  
   if(!is_numeric($ktid = $_GET['ktid'])) $ktid = 0;  
  
   if($_SESSION['closed_foren'][$ktid] == 0)  
      {  
      $_SESSION['closed_foren'][$ktid] = 1;  
      }  
   else  
      {  
      $_SESSION['closed_foren'][$ktid] = 0;  
      }  
   @setcookie("closed_foren",serialize($_SESSION['closed_foren']),time()+(3600*24*100));  
   }  
?>

Auch wenn ich setcookie deaktiviere, funktioniert der Script nicht.

Also der Script fragt ab, welches Minuszeichen angeklickt wurde.
Dann wird in der Session der Wert auf 1 bzw. 0 gesetzt.
0 bedeutet dabei: Eingeblendet, 1 => Ausgeblendet.

Dies wird in der Schleife bei der Ausgabe wie folgt überprüft:
if($_SESSION['closed_foren'][$id] == 0) //Ausgabe der Unterforen

Wie gesagt, alles klappt bei MSIE.
So wenn ich jetzt in der aller letzten Zeile den Wert von $_SESSION['closed_foren'] ausgebe, dann wird unter Firefox ein Array mit den richtigen,geänderten Werten ausgegeben.

Öffne ich aber jetzt in dem Tmp-Ordner die Session Datei, dann steht für die Session nicht der neue Wert, welcher auch ausgegeben wird, sondern immernoch der alte Wert.
=> Man kann keine Kategorie dauerhaft schließen, da in der Session Datei immer ein "leeres" Array steht (alle Kategorien geöffnet).

Bei MSIE wird der Session Wert ganz normal gespeichert, also funktioniert das öffnen/schließen einwandfrei.

Die SID wird bei Firefox einwandfrei übergeben, andere Session Werte werden dort auch gespeichert.

Kann mir jemand weiterhelfen bei dem Problem?

MFG
Andavos

  1. hi,

    if($_SESSION['closed_foren'][$ktid] == 0)

    ausgabe von var_dump($_SESSION['closed_foren'][$ktid]) an dieser stelle?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      if($_SESSION['closed_foren'][$ktid] == 0)

      ausgabe von var_dump($_SESSION['closed_foren'][$ktid]) an dieser stelle?

      Wie gesagt, sowohl an den entscheidenen stellen sowie am Ende des Scripts sind im Session-Array die richtigen Werte gespeichert. Man kann auch 1 Kategorie ausblenden, diese Einstellung wird aber nicht dauerhaft übernommen, denn beim nächsten Seitenaufruf ist 'closed_foren' wieder ein leeres Array / leere Variable.

      Ganz am Ende des Scripts enthält 'closed_foren' die richtigen Werte, diese werden allerdings nicht in der Session Datei gespeichert, so das beim nächsten Aufruf 'closed_foren' wieder leer ist.

      Aber das komische, dies ist nur beim Firefox so, und andere Session werden gespeichert.
      Auf meinem Entwicklungsserver sowohl auf dem echten Server ist dieses Problem vorhanden.
      Register globals macht keinen Einfluss.

      Grüße
      Andavos

      1. Hallo

        Ganz am Ende des Scripts enthält 'closed_foren' die richtigen Werte, diese werden allerdings nicht in der Session Datei gespeichert, so das beim nächsten Aufruf 'closed_foren' wieder leer ist.

        Lässt du zufällig in den Browsereinstellungen Cookies nur für die aktuelle Browsersession zu?

        Tschö, Auge

        --
        Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
        (Victor Hugo)
        Veranstaltungsdatenbank Vdb 0.1
        1. Hallo,

          Lässt du zufällig in den Browsereinstellungen Cookies nur für die aktuelle Browsersession zu?

          wie gesagt, die SID wird richtig übergeben (testweise immer per URL). Andere Session Werte wie Username, PW, ID etc. werden auch richtig gespeichert & übergeben.

          Grüße
          Andavos

  2. echo $begrüßung;

    Mit dem Internet Explorer funktioniert dies ohne Probleme, aber bei Firefox geht dies nicht.

    Versuche herauszufinden, wo die Unterschiede sind. Lasse dir die übergebenen Werte der beiden Browser anzeigen. Am besten mit var_dump() (ein <pre> vorher erhöht die Übersichtlichkeit).

    Lass dir die Werte der verwendeten Variablen im fehlerhaften Abschnitt anzeigen. Suche die Unterschiede.

    Noch zwei anderen Dinge:

    if($_SESSION['closed_foren'][$ktid] == 0)
          {
          $_SESSION['closed_foren'][$ktid] = 1;
          }
       else
          {
          $_SESSION['closed_foren'][$ktid] = 0;
          }

    Willst du hier nicht lieber mit booleschen Werten arbeiten? Das ganze Konstrukt ließe sich dann auf

    $_SESSION['closed_foren'][$ktid] = ! $_SESSION['closed_foren'][$ktid];

    reduzieren;

    In dem Script http://www.php-einfach.de/main.zip sehe ich die Verwendung von stripslashes().
    Lies dir das Kapitel Magic Quotes durch. Versuche zu verstehen, wozu die Dinger da sein sollen und versuche die Maßnahmen aus Disabling Magic Quotes anzuwenden. Damit sparst du dir das ständige Gestripslashe.

    echo "$verabschiedung $name";

    1. Hallo,

      Mit dem Internet Explorer funktioniert dies ohne Probleme, aber bei Firefox geht dies nicht.

      Versuche herauszufinden, wo die Unterschiede sind. Lasse dir die übergebenen Werte der beiden Browser anzeigen. Am besten mit var_dump() (ein <pre> vorher erhöht die Übersichtlichkeit).

      Dies habe ich gemacht, und sowohl beim MSIE als auch beim Firefox sind die Ausgaben identisch und auch richtig.
      Der einzige Unterschied:
      Wenn ich MSIE verwende, werden die Werte in die Session Datei gespeichert. Beim Firefox nicht, dort ist die Variable 'closed_foren' immer ein leeres Array.
      Beim nächsten Aufruf ist beim Firefox also der Session Wert leer, wärend sich unter MSIE gemerkt wurde, welche Foren der User schon ausgeblendet hat.

      Lass dir die Werte der verwendeten Variablen im fehlerhaften Abschnitt anzeigen. Suche die Unterschiede.

      Das Problem liegt ja, dass die Werte beim Firefox nicht gespeichert werden => sie können nicht über mehrere Seiten hinweg benutzt werden => man kann max. 1 Kategorie zuklappen, weil jeweils die Seite neu geladen wird.

      In dem Script http://www.php-einfach.de/main.zip sehe ich die Verwendung von stripslashes().

      Dies ist an der Stelle nötig, da sonst das serialized 'closed_foren'-Array aus dem Cookie nicht importiert werden kann (zu viele Backslashes, auf Grund von magic_get_quotes = On (immer) )

      Auch wenn ich die _gesamte_ Cookie Behandlung auskommentiere, funktioniert es nicht.

      Damit sparst du dir das ständige Gestripslashe.

      Die habe ich aktiviert, und wenn nicht, wird diese aktiviert. Aber dort sind dann zuviele Maskierungen.
      Und nur an der Cookie stelle findest du stripslashes();

      Grüße
      Andavos

      1. echo $begrüßung;

        [...] sowohl beim MSIE als auch beim Firefox sind die Ausgaben identisch und auch richtig.

        Nun, wenn du die Unterschiede nicht findest, dann solltest du mal alles zusammenpacken und hier verlinken, damit man das mal selbst nachvollziehen kann. Irgendwo muss da ein Unterschied sein.

        echo "$verabschiedung $name";

        1. Hallo,
          hier ist das ganze Forum:
          http://www.php-einfach.de/cb.zip

          Dazu ist noch zu sagen, dass sich die Version 2.0 des Forum noch im Teststadion befindet, und eigentlich zum offiziellem Download noch nicht angeboten wird.
          Es sind außerdem noch ungewollte Ausgaben vorhanden.

          Installation und Einrichtung ist Kinderleicht. Einfach im Adminbereich zwei Kategorien mit einem Unterboard anlegen, dann bemerkt man den Unterschied.

          Und danke für die Mühe

          Grüße
          Andavos

          1. echo $begrüßung;

            hier ist das ganze Forum:
            http://www.php-einfach.de/cb.zip

            Puh, also, hier mal ein Zwischenbericht:
            Der FF ruft die Seite zweimal auf. Damit wird die Änderung in der Session wieder in ihr Gegenteil verkehrt. Warum er das macht, habe ich noch nicht herausgefunden.
            Du kannst dir das ansehen, wenn du dir beispielsweise mal die LiveHTTPHeaders-Extension installierst.

            echo "$verabschiedung $name";

            1. Hallo,

              hier ist das ganze Forum:
              http://www.php-einfach.de/cb.zip

              Puh, also, hier mal ein Zwischenbericht:
              Der FF ruft die Seite zweimal auf. Damit wird die Änderung in der Session wieder in ihr Gegenteil verkehrt. Warum er das macht, habe ich noch nicht herausgefunden.
              Du kannst dir das ansehen, wenn du dir beispielsweise mal die LiveHTTPHeaders-Extension installierst.

              Danke, aber da steht ich vor dem nächsten Problem ^^. Aber danke, jetzt weiß ich wonach ich suchen muss.

              Grüße
              Andavos

              1. Hallo,
                habs endlich gefunden.

                Und zwar im Template css steht folgendes:
                background-image : url({bgbild});

                Dabei wird {bgbild} durch die URL zum Bild ersetzt.
                Wenn man jetzt aber kein Hintergrund Bild hat, so steht nachher im CSS Style:
                background-image : url();

                Dies führt beim Firefox denke ich mal dazu, dass als Background Bild die aktuelle Seite gewählt wird => Seite wird erneut aufgerufen.

                Wenn ich das entferne, funktioniert wieder alles einwandfrei, kein doppeltes laden der Seite mehr.

                Danke für die Hilfe.

                MFG
                Andavos

  3. Hello,

    stell als erstes mal alle Komponenten auf "redselig".

    Also bei den Clients die Cookies erst annehmen nach Rückfrage
    Beim Server alle Melungen, auch Notices anzeien lassen.

    die phpinfo() angucken, was da für die session.* -Parameter eingetragen ist.

    Harzliche Grüße vom Berg
    esst mehr http://www.harte-harzer.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau