Olaf: XHTML Problem bei PHP-Sessions

Moin,

folgendes Problem bei XHTML 1.0 Transitional und PHP-Sessions:

Nachdem die Session initialisiert ist, wird automatisch vom Browser die Variable PHPSESSID an jede URI der verschiedenen Links innerhalb einer Seite angehängt. Leider nicht, wie für XHTML nötig, mit korrekten & sondern nur in der Form ".../index.php?var=x&PHPSESSID=41a1a8185". Dies sorgt dafür, dass die aus der ursprünglich geladenen Seite aufgerufenen Links nicht geladen werden können und der Browser "sich scheinbar tot lädt"...
Auch vom W3C Validator wird dieses Anhängsel in den URIs angemeckert.

Gibt es einen weg, dass die Session-Variable PHPSESSID korrekt angehängt wird? Habe ich u.U. noch einen Fehler in der XHTML-Datei?

Gruß
Olaf

  1. Hallo Olaf,

    Gibt es einen weg, dass die Session-Variable PHPSESSID korrekt angehängt
    wird? Habe ich u.U. noch einen Fehler in der XHTML-Datei?

    Du suchst

    ini_set("arg_separator.output", "&");

    Grüße,
     CK

    --
    Echte Hacker benutzen Aexte. (Thomas Walter in de.org.ccc)
    http://wwwtech.de/
    1. Sup!

      ini_set("arg_separator.output", "&");

      Schockierend, was Du für Kenntnisse in der Programmiersprache pubertierender Hauptschüler hast...

      Gruesse,

      Bio

      --
      Kein Kommentar!
      1. Hallo Bio,

        ini_set("arg_separator.output", "&");

        Schockierend, was Du für Kenntnisse in der Programmiersprache
        pubertierender Hauptschüler hast...

        Hehe. Ich kann mich dunkel erinnern, dass du dich auch mal in PHP
        eingearbeitet hast ;-)

        Grüße,
         CK

        --
        Wer sich zu überschwänglich freut, wir später Grund zum Weinen haben.
        http://wwwtech.de/
    2. Hallo Christian,

      danke für die schnelle Hilfe. Nun konnte alles validiert werden.
      Ein Problem ist aber noch geblieben:

      Ich benutze für die Website PHP-Sessions und generiere daraus wie gesagt XHTML. Die Session wird über session_start() in jeder Seite initialisiert. Was mich nun wundert ist, dass die SessionId automatisch an jeden relativen Link angehängt wird, obwohl in der php.ini die Parameter session.use_cookies=1 und session.use_trans_sid=0 gesetzt sind.

      Wenn ich nun eine beliebige Seite der Website erstmalig im frisch geöffneten Browser lade, wird diese angezeigt - aber eben mit Links inkl. PHPSESSID. Wenn ich nun einen der auf der Seite aufgelisteten Links aufrufe, lädt der Browser eine Zeit und bricht dann ohne Meldung den Ladevorgang ab und bleibt auf der zuerstgeladenen Seite stehen.

      Woran liegt das?

      Gruß
      Olaf

      1. Hallo Olaf,

        Wenn ich nun eine beliebige Seite der Website erstmalig im frisch geöffneten Browser lade, wird diese angezeigt - aber eben mit Links inkl. PHPSESSID.

        Du kannst in PHP 4 use_trans_sid nicht in Scripten ausschalten - in PHP 5 geht das. Es gibt allerdings einen Workaround:

        ini_set ('url_rewriter.tags', '');

        Wichtig ist, dass dieser _vor_ session_start() ausgeführt wird.

        Wenn ich nun einen der auf der Seite aufgelisteten Links aufrufe, lädt der Browser eine Zeit und bricht dann ohne Meldung den Ladevorgang ab und bleibt auf der zuerstgeladenen Seite stehen.

        Woran liegt das?

        Das kann ich mir allerdings nicht erklären. Ein Link zum Selberprobieren wäre nicht schlecht.

        Viele Grüße,
        Christian

        1. Du kannst in PHP 4 use_trans_sid nicht in Scripten ausschalten - in PHP 5 geht das. Es gibt allerdings einen Workaround:

          ini_set ('url_rewriter.tags', '');

          Das hat geklappt. Danke!

          Wenn ich nun einen der auf der Seite aufgelisteten Links aufrufe, lädt der Browser eine Zeit und bricht dann ohne Meldung den Ladevorgang ab und bleibt auf der zuerstgeladenen Seite stehen.

          Woran liegt das?

          Das kann ich mir allerdings nicht erklären. Ein Link zum Selberprobieren wäre nicht schlecht.

          Es geht um mein derzeitiges Entwicklungsprojekt:

          http://www.netbugs.de/neu/

          Ich habe versucht, einzelne schlankere Testfälle aufzubauen, allerdings trat der Fehler dort nicht auf...

          Auf der angezeigten Seite findet ihr folgende Fälle:

          Die Punkte home, links und impressum werden in html 4.01 transitional ausgegeben. Alle anderen Menüpunkte in xhtml 1.0 transitional.
          Bei den 3 in html ausgegebenen Punkten wird alles zügig geladen.
          Bei den in xhtml ausgegebenen Punkten ist es so, dass die erstmalig aufgerufene Seite noch normal geladen wird. Ruft man dann einen anderen beliebigen Punkt (ob html oder xhtml) auf, so wird dieser meist gar nicht oder aber nur unvollständig geladen.

          Woran kann das liegen? html und xhtml sind über den w3c-validator erfolgreich geprüft worden.

          Gruß
          Olaf

          1. Ich habe die Vermutung, dass es an den Sessions liegt, die ich benutze. Ich initialisiere in jedem php-Skript über folgende Funktion:

            Quellcode:
            function init_session(){
              ini_set('arg_separator.output', '&');
              ini_set ('url_rewriter.tags', '');
              @session_start();
              if (count($_SESSION['s_cars']) == 0){
                $_SESSION['s_cars'] = array();
              }
              if (empty($_SESSION['s_lang']) || isset($_GET['lang']) && $_SESSION['s_lang'] != $_GET['lang']){
                if (isset($_GET['lang'])){
                  $_SESSION['s_lang'] = $_GET['lang'];
                }else{
                  $_SESSION['s_lang'] = 'd';
                }
              }
            }

            Nehme ich den Funktionsaufruf für diese Funktion aus den php-Skripten raus, werden die Seiten normal geladen. Kann es sein, dass Session-Variablen in XHTML anders übertragen werden, als in HTML?

            Gruß
            Olaf

          2. Hallo Olaf,

            Bei den in xhtml ausgegebenen Punkten ist es so, dass die erstmalig aufgerufene Seite noch normal geladen wird. Ruft man dann einen anderen beliebigen Punkt (ob html oder xhtml) auf, so wird dieser meist gar nicht oder aber nur unvollständig geladen.

            Irgendwo produzierst Du eine Endlosschleife. Dein Problem hat _nichts_ mit Transitional oder nicht zu tun - sobald der Browser ein Session-Cookie sendet, laden _alle_ Deine Seiten (zumindest bei mir) nicht mehr.

            Der Code in Deinem anderen Posting sieht in Ordnung aus - es muss an einer anderen Stelle liegen. Ich kann Dir - ohne den Code zu kennen - leider keine genauere Diagnose stellen.

            Viele Grüße,
            Christian

            1. Hallo Christian,

              ich hatte letzte Woche den Fehler noch gefunden. Ich hatte keine Endlosschleife produziert. Ich arbeite mit einem Template-System von Brian E. Lozier. In der Header-Template-Datei habe ich eine Session-Variable angesprochen. Dies hatte zum Fehler geführt.

              Gruß
              Olaf