Phil Z.: Liegt plötzl. ein Verständnisproblem mit Sessions vor?

Hallo,

bin ich richtig der Annahme das Folgende Skripts klappen sollten?(Tun sie nicht^^)

----------------------------------------------------------
index.php
----------------------------------------------------------
<?php
session_start();
$user='Fritz';
$_SESSION['nick']=$user;
header('Location: weiter.php');
exit();
?>
----------------------------------------------------------
weiter.php
----------------------------------------------------------
<?php
session_start();
echo $_SESSION['nick'];
?>

Aus irgendeinem Grund gibt der die Varibale$_SESSION['nick'] nicht weiter..
print_r($_SESSION) gibt nichts aus, bzw "Array()".
Wenn ich auf der index.php $user ausgebe mit echo dann wird Fritz ausgegeben, also an der Variable liegts auch nicht. Wenn ich $_SESSION['nick'] bei der index.php ausgebe mit echo klappts auch.

Ich hab schon x mal mit Sessions gearbeitet, aber irgendwie bin ich durcheinander.

mfg

Phil Z.

  1. Hi Phil!

    Aus irgendeinem Grund gibt der die Varibale$_SESSION['nick'] nicht weiter..

    Doch. =)

    Ich vermute, dein Problem liegt beim header. Du musst eine absolute URL angeben.
    Außerdem, warum bist du dir sicher, dass auf die Datei weiter.php weitergeleitet wird? Hast du das überprüft?

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Hi Hopsel,

      ja habe ich , wird perfekt weitergeleitet, daran liegts net.

      mfg

      Phil Z.

      1. Hello,

        ja habe ich , wird perfekt weitergeleitet, daran liegts net.

        Welcher Browser, welche Sicherheitsstufe?

        Lass Dir die Cookies mal anzeigen, wenn Du die Antwort vom Server erhältst.
        Das sollte man zum Entwickeln eigentlich immer tun.
        Maximal mögliche Information.

        Genauso wie mit den Fehlermeldungen des Scriptes...

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

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

        1. Es komtm keine Fehlermeldung, Cookies sind aktiv, ich habs mit IE6, IE7 und FF2 getestet.
          Es liegt einfahc daran das die Variable nicht weitergegeben wird.

          Cookies klappen einwandfrei, auch alle andere Skript klappen, es kommt keine Fehlermeldung sondern einfach nur nichts.

          1. Hello,

            Es komtm keine Fehlermeldung, Cookies sind aktiv, ich habs mit IE6, IE7 und FF2 getestet.
            Es liegt einfahc daran das die Variable nicht weitergegeben wird.

            Cookies klappen einwandfrei, auch alle andere Skript klappen, es kommt keine Fehlermeldung sondern einfach nur nichts.

            Was wird Dir denn angezeigt vom Browser, wenn der Cookie für die Session eintrifft?
            Du weißt schon, dass der Browser zwei Arten Cookies unterscheidet?

            Was wird dir angezeigt, wenn Du ins Script

            print_r($_COOKIE);

            aufnimmst`?

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

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

            1. ´Hey,
              wenn ichs mit Cookies mache also per $_COOKIE dann klappts doch einwandfrei nur wenn ich $_SESSION verwende nicht,
              wenn ich dann print_r($_SESSION) ausgebe sagt er "Array()";

              mfg

              Phil Z.

              1. Hi.
                print_r($_COOKIE);
                Dann wird:
                Array ( ) 1
                ausgegeben.

                mfg

                Phil Z.

              2. Hello,

                wenn ichs mit Cookies mache also per $_COOKIE dann klappts doch einwandfrei nur wenn ich $_SESSION verwende nicht,
                wenn ich dann print_r($_SESSION) ausgebe sagt er "Array()";

                Poste doch bitte mal die Ergebnisse von

                print_r($_COOKIE)

                Harzliche Grüße vom Berg
                http://www.annerschbarrich.de

                Tom

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

      2. Hi!

        wird perfekt weitergeleitet

        Die Weiterleitung ist aber trotzdem falsch.

        daran liegts net.

        Stimmt. Daran wird's nicht liegen. Das hat mit deinem eigentlichen Problem nichts zu tun.
        Trotzdem solltest du einen absoluten URI übergeben, sprich:
        header( 'Location: http://deineSite.de/verzeichnis/weiter.php' );
        exit;

        Schöner Gruß,
        rob

  2. header('Location: weiter.php');

    Das ist falsch!

    richtig:

      
    header('Location: http://'.$_SERVER['HTTP_HOST'].'/weiter.php');  
    
    

    Location: muss immer absolut angegeben sein.

    oma

    1. Hi.

      richtig:

      header('Location: http://'.$_SERVER['HTTP_HOST'].'/weiter.php');

      
      >   
      > Location: muss immer absolut angegeben sein.  
        
      Klappt auch nicht absolut, habs aber mal geändert, klappt immer noch nicht.  
        
      mfg  
        
      Phil Z.  
      
      
  3. Hallo,

    Cookies deaktiviert?

    ike

    1. Hallo,
      nein.

      Wenn ichs mit normalen Cookies mache funktionierts auch, nur mti Sessions nicht.

      mfg

      Phil

  4. hi,


    weiter.php

    <?php
    session_start();
    echo $_SESSION['nick'];

    print_r($_COOKIE); // hat die Übergabe der Session-ID überhaupt geklappt?

    ?>

    gruß,
    wahsaga

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

      print_r($_COOKIE); // hat die Übergabe der Session-ID überhaupt geklappt?

      Dann wird:
      Array ( ) 1
      ausgegeben.

      mfg

      Phil Z.

      1. hi,

        print_r($_COOKIE); // hat die Übergabe der Session-ID überhaupt geklappt?
        Dann wird:
        Array ( ) 1
        ausgegeben.

        Aha. Aaalsoo ...?

        gruß,
        wahsaga

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

          Aha. Aaalsoo ...?

          :D
          hat die Übergabe der Session-ID nicht geklappt, und wie änder ich das?

          Sorry Leute ich steh heute echt aufm Schlauch.

          mfg

          Phil Z.

          1. Hi!

            hat die Übergabe der Session-ID nicht geklappt, und wie änder ich das?

            Wenn die Session-ID nicht per Cookie übergeben werden kann, dann mußt du sie halt per URL übergeben.

            Schöner Gruß,
            rob

            1. Hello,

              hat die Übergabe der Session-ID nicht geklappt, und wie änder ich das?
              Wenn die Session-ID nicht per Cookie übergeben werden kann, dann mußt du sie halt per URL übergeben.

              Das hat er doch noch gar nicht überprüft!
              Ich hatte ihn doch nun schon mehrmals aufgefordert, seinen Browser zum Testen so einzustellen, dass gesendete Cookies angezeigt werden, bevor sie ___angenommen___ werden vom Browser.

              Dann kann er vergleichen, ob das überhaupt der Cookie für die Session ist.

              Harzliche Grüße vom Berg
              http://www.annerschbarrich.de

              Tom

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

              1. Hey,

                die Session ID wird nun übergeben.

                bei print_r($_COOKIE)
                kommt

                Array ( [PHPSESSID] => a667034ff60527a96798e00445dba33d ) 1

                mfg

                Phil Z.

                1. Hello,

                  die Session ID wird nun übergeben.

                  bei print_r($_COOKIE)
                  kommt

                  Array ( [PHPSESSID] => a667034ff60527a96798e00445dba33d ) 1

                  Du bist uns trotzdem noch die Antwort schuldig, mit welchem Browser Du arbeitest!
                  Die Standardeinstellung bei einigen ist nämlich, bei Weiterleitung keine Cookies mitzusenden.

                  Harzliche Grüße vom Berg
                  http://www.annerschbarrich.de

                  Tom

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

                  1. Hey,

                    Du bist uns trotzdem noch die Antwort schuldig, mit welchem Browser Du arbeitest!

                    ich arbeite mit dem IE6, IE7 und FF2 gleichzeitig, habe alle drei instlaliert und parlell laufen und teste die seite jedesmal mit allen 3 Browsern.

                    Die Standardeinstellung bei einigen ist nämlich, bei Weiterleitung keine Cookies mitzusenden.

                    Hab alle möglichen Sicherheitseinstellungen probiert und beim IE7 im Moment die EInstellung das ich jede Cookieaktion bestätigen muss und mir den Inhalt angucken kann.

                    mfg

                    Phil Z.

                    1. Hello,

                      Hab alle möglichen Sicherheitseinstellungen probiert und beim IE7 im Moment die EInstellung das ich jede Cookieaktion bestätigen muss und mir den Inhalt angucken kann.

                      Dann muss es ja jetzt klappen mit der Session, oder?

                      ... natürlich nicht von einem Browser zum nächsten ;-))

                      Harzliche Grüße vom Berg
                      http://www.annerschbarrich.de

                      Tom

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

                      1. Hey,
                        nein es klappt immer noch nicht, nur wenn ich den Brwoser entsprechend konfiguriere, aber ich kan ja nicht jedem Besucher sagen er solle bitte seinen Brwoser umstellen.
                        Es klappt nur wenn ich die sessionid per url weitergebe

                        header("Location: http://".$_SERVER['HTTP_HOST']."/weiter.php?$s_name=$s_id")

                        1. Hello,

                          nein es klappt immer noch nicht, nur wenn ich den Brwoser entsprechend konfiguriere, aber ich kan ja nicht jedem Besucher sagen er solle bitte seinen Brwoser umstellen.
                          Es klappt nur wenn ich die sessionid per url weitergebe

                          header("Location: http://".$_SERVER['HTTP_HOST']."/weiter.php?$s_name=$s_id")

                          Dann solltest Du erstmal mögliche Fehlerquellen ausschließen und es ohne Umleitung ausprobieren.

                          Bau einen Link in die erste Seite und schau Dir an, was der Browser und er Server dann melden.

                          Und dann schau Dir mal die Reihenfolge der Header-Direktiven an, die der Server versendet.
                          Das geht i.d.R. nur, wenn Du sie in eine Datei umleitetst, bevor Du das Script verlässt und diese dann im zweiten Dokument (aus das Du weiterleitetst) wieder öffnest.

                          http://www.php.net/manual/en/function.apache-response-headers.php

                          Nur zur Anregung:

                          <?php  ### headerlist.php ###

                          /* setcookie() will add a response header on its own */
                          setcookie('foo', 'bar');

                          /* Define a custom response header
                             This will be ignored by most clients */

                          header("X-Sample-Test: foo");

                          /* Specify plain text content in our response */

                          header('Content-type: text/plain');

                          Veränderungsdatum der Datei auf vor 10 Sec. setzen

                          $last_modified = @gmdate('D, d M Y H:i:s',time()-10).' GMT';
                          header ("Last-Modified: $last_modified");

                          echo "<pre>";
                          /* What headers are going to be sent? */
                          if(function_exists("headers_list"))
                          {
                            print_r(headers_list());
                          }
                          elseif(function_exists("apache_response_headers"))
                          {
                            print_r(apache_response_headers());
                          }
                          else
                          {
                            echo "\nkeine Header-Listing-Funktion verfügbar\n";
                          }
                          echo "</pre>";

                          ?>

                          Einfach mal die Kommentarzeichen wegnehmen...

                          Harzliche Grüße vom Berg
                          http://www.annerschbarrich.de

                          Tom

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

                          1. Hi!

                            Bau einen Link in die erste Seite und schau Dir an, was der Browser und er Server dann melden.

                            Da geschrieben wurde, daß u.a. auch der Firefox zur Verfügung steht, empfehle ich das Add-on Live HTTP Headers.
                            Damit ist es möglich, sich die Kommunikation zwischen Server und Client anzuschauen.
                            Man kann alle Header mitprotokollieren/abspeichern.
                            Man kann sich die Header in einem neuen Tab anschauen oder man kann die Header "live" in der Sitebar bewundern, wenn man eine Website aufruft.
                            Es ist auch möglich, die vom Browser zusendenden Header selbst zu modifizieren.
                            Cookies kannst du damit natürlich auch genau beobachten.
                            Für dieses Problem hier ist das Tool also äußerst hilfreich.
                            Hier kann man sehen, was das Ding so alles drauf hat (bzw. es ist auch fast sowas wie eine Anleitung):
                            http://livehttpheaders.mozdev.org/screenshots.html

                            Ein weiteres, sehr nützliches Tool in dieser Richtung, ist das Firefox Add-on "Modify Headers" von Gareth Hunt.
                            Download-Link weiß ich momentan nicht auswendig. Man kann das Ding natürlich auf den Firefox-Addon-Seiten finden oder mit Hilfe einer Suchmaschine.
                            Oder man schaut in das Weblog des Programmierers:
                            http://www.garethhunt.com
                            Dort wird man auch Links zum Download finden.

                            Ich würde für diesen Fall jedoch das erste Tool bevorzugen.

                            Schöner Gruß,
                            rob

      2. Hello,

        print_r($_COOKIE); // hat die Übergabe der Session-ID überhaupt geklappt?
        Dann wird:
        Array ( ) 1
        ausgegeben.

        Und was steht nun in den Klammern des Arrays? Nischt!
        Und woher kommt die 1?
        Da sitmmt doch 'was nicht!

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

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

  5. Hallo Phil,

    schau Dir dazu die Kommentare zur Funktion session_write_close() an.
    http://php.net/manual/de/function.session-write-close.php

    Viele Grüße

    Stefan

    --
    bythewaythewebsuxgoofflineandenjoytheday
  6. echo $begrüßung;

    Aus irgendeinem Grund gibt der die Varibale $_SESSION['nick'] nicht weiter..

    Hier scheint mir auch noch ein Verständnisproblem deinerseits vorzuliegen. $_SESSION wir nicht "weitergegeben". $_SESSION ist nur ein Behälter zum Aufheben von Daten. Weitergegeben (an den Browser und von dem wieder zurück) wird nur die Session-ID, Mit dieser findet PHP dann den richtigen $_SESSION-Behälter. Wenn also dein Behälter nicht das Erwartete enthält, solltest du den Fehler bei der Übergabe der Session-ID suchen.

    echo "$verabschiedung $name";

    1. Hallo,

      Aus irgendeinem Grund gibt der die Varibale $_SESSION['nick'] nicht weiter..

      Hier scheint mir auch noch ein Verständnisproblem deinerseits vorzuliegen. $_SESSION wir nicht "weitergegeben". $_SESSION ist nur ein Behälter zum Aufheben von Daten. Weitergegeben (an den Browser und von dem wieder zurück) wird nur die Session-ID, Mit dieser findet PHP dann den richtigen $_SESSION-Behälter. Wenn also dein Behälter nicht das Erwartete enthält, solltest du den Fehler bei der Übergabe der Session-ID suchen.

      Oder aber auch bei der Speicherung des Behälters auf dem Server. Vielleicht gibt's auf's Temp-Verzeichnis ja keine Schreibrechte?

      Viele Grüße,
      Christian

      1. Hello,

        Oder aber auch bei der Speicherung des Behälters auf dem Server. Vielleicht gibt's auf's Temp-Verzeichnis ja keine Schreibrechte?

        Nur weil Du es gerade ansprichst:
        Es ist auf einem shared Host sowieso schmuddelig, die Sessiondateien alle in einem gemeinsamen Verzeichnis zu speichern. Dort können sie dann nämlich "entführt" werden. Das ist eine Sicherheitslücke.

        Aber deshalb hatte ich ihm den Rat gegeben, erst mal eine "einfache Session" auszuprobieren.
        Wie war das denn mit den Fehlermeldungen, wenn Sessiondateien nicht gespeichert oder gelesen werden können?

        Musste erst was umbbauen. Hier das Ergebnis

        Warning: session_start() [function.session-start]: open(/tmp/sessions/other/sess_ed418416416a02217ad9a51a9790ce00, O_RDWR) failed: No such file or directory (2) in /home/thomas/web/php4/Sessions/sessions/login.php on line 2

        Es gäbe also eine Warnung

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

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

        1. Hello,

          (Verzeichnis richtiggestellt, und nochmals getestet. Nur falls jemand fragt.)

          Warning: session_start() [function.session-start]: open(/tmp/sessions/others/sess_ed418416416a02217ad9a51a9790ce00, O_RDWR) failed: No such file or directory (2) in /home/thomas/web/php4/Sessions/sessions/login.php on line 2

          Es gäbe also eine Warnung

          Wenn die Sessiondatei nicht vorhanden wäre
          und wenn man sie nicht anlegen kann:

          Warning: session_start() [function.session-start]: open(/tmp/sessions/others/sess_032eae1b3377e7f54b13f41e77405bfc, O_RDWR) failed: Permission denied (13) in /home/thomas/web/php4/Sessions/sessions/login.php on line 2

          Ich habe das Schreibrecht auf das Verzeichnis entzogen.

          Beim Session_verzeichnis_, wenn man schon alle Sessions in ein Verzeichnis packt, sollte man das Leserecht entziehen (unter Linux!). Dann kann das Verzeichnis nicht gescannt werden.
          Das ist dann ein wenig "Sicherheit durch mangelnde Information".
          Nur wer den Namen der Sessiondatei kennt, kann dann darauf zugreifen.

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

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