Ankündigung

Einklappen
Keine Ankündigung bisher.

Sessionvaribale bekommen wenn header schon gesendet wurde

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sessionvaribale bekommen wenn header schon gesendet wurde

    Hallo,

    Ich habe eine php-Datei in der ich auf eine Sessionvariable zugreifen müsste, leider wird diese datei über Ajax von einer schon bestehenden php-Seite aufgerufen, so dass ich in besagter Datei kein session_start() unterbringen kann ohne, dass der Server grantig wird (header already send...).

    Theoretisch könnte ich die Sessionvariable in der schon bestehenden Seite in ein hidden Textfeld schreiben und dann per ajax mit übergeben, aber in punkto Sicherheit ist das ja sicherlich nicht das Optimale, oder?

    Gibt's dafür einen eleganteren Weg?

  • #2
    Ein Ajax Request ist doch total unabhängig von der bestehenden Seite, daher kannst du doch beim Request die Session-ID mitsenden und ganz normal auf die Session zugreifen.

    Kommentar


    • #3
      Aber dann steht die variable doch im Quelltext, ich mein wegen dem Aspekt sicherheit.

      Kommentar


      • #4
        Naja irgendwie musst du ja die Session weitergeben, entweder Cookie oder URL.

        Die Session steht bei deiner Variante zwar im Quelltext aber warum stellt das so ein großes Sicherheitsrisiko dar?
        Bei Benutzern die keine Cookies erlauben wird die Session ja nur so 'manuell' weitergegeben.

        Kommentar


        • #5
          Ich glaub hier gibt es ein Mißverständnis. Erklär doch nochmal wie genau dein Ajax-Aufruf aussieht und warum hier kein Session-Start erfolgen dürfte?

          Kommentar


          • #6
            ok, ich habe eine Seite die einen geschützen Bereich darstellt in dessen Umgebung es einige Sessionvariablen gibt, auf dieser Seite befindet sich auch das Javascript für den Ajax-Aufruf.
            Beim Ajax-Aufruf wird ein anderes php-file aufgerufen:
            http.open('post', 'phpseite2.php');
            http.onreadystatechange = handleResponse;
            http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            http.send('var='+var123);
            und
            function handleResponse() {
            if(http.readyState == 4){
            var tippschein = http.responseText;
            document.getElementById("tippschein").innerHTML = tippschein;
            }
            In diesem Beispiel wird jetzt noch eine andere variable per post übergeben, die mit der Session eigentlich nichts zu tun hat.

            Auf der der seite "phpseite2.php" will ich nun verschiedene Dinge auswerten, unteranderem brauch ich aber eine Sessionvariable.
            Wenn ich auf phpseite2.php z.B. habe:
            PHP-Code:
            echo $_SESSION["wichtigevariable"]; 
            gibt php gar nichts aus.
            Und wenn ich session_start() an den Anfang von phpseite2.php setze, dann wird "header already send" ausgegeben, weil ich die session schon auf phpseite1.php gestartet habe und phpseite2.php nur über das ajaxscript aufrufe, also nicht neu lade.

            Kommentar


            • #7
              Dann schau doch zuerstmal an der Stelle nach, an der der header already sent wurde.
              Wenn du zwei verschiedene PHP-Dateien über Web ansprichst, aber über Ajax verbindest, hat das überhaupt keinen Einfluß aufeinander. Denn zuerst wird PHP 1 ausgeführt, das HTML 1 ausgibt, welches AJAX 1 erzeugt, welches wiederum PHP 2 aufruft. Zumindest wenn ich deinen Ablauf so richtig verstanden habe. Aber Ajax und HTML interessieren uns hier nicht die Bohne und haben auch nicht die Bohne an der Verbindung beider Skripte zu tun. Denn beides sind Sprachen, die Client-seitig ausgeführt werden, PHP wird serverseitig ausgeführt. Wenn das noch nicht bei dir angekommen ist, geh nochmal zurück zum Start! Außerdem: Lies doch mal die Fehlermeldung und geh an die Stelle, die konkret den Fehler verursacht (dort eben, wo angeblich der Header bereits gesendet wurde).

              Kommentar


              • #8
                ok danke, ich habe gedacht das hängt irgendwie zusammen.
                Ich hatte
                PHP-Code:
                <? 
                session_start();
                //rest
                ?>
                jetzt hab ich:
                PHP-Code:
                session_start();
                ?>
                <?
                //rest vom script
                ?>
                Und es gibt keine Fehlermeldung mehr aus, ich wusste nicht, dass man das trennen muss.

                Kommentar


                • #9
                  Also ob du nun

                  PHP-Code:
                  <?php
                  session_start
                  ();
                  echo 
                  $_SESSION['VAR'];
                  // ...
                  ?>
                  oder
                  PHP-Code:
                  <?php
                  session_start
                  ();
                  ?>
                  <?php
                  echo $_SESSION['VAR'];
                  // ...
                  ?>
                  schreibst ist doch wurscht, solange du vor session_start() keinen Output hast. Da versteh ich das Skript nicht, wenn beim einen eine Fehlermeldung ausgespuckt wird und beim anderen nicht.

                  Kommentar

                  Lädt...
                  X