Session für Dummies

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

  • Session für Dummies

    Hallo allerseits,

    ich setze mich momentan mit dem Thema "Session" auseinander und verstehe einige Zusammenhänge nicht so richtig. Und hoffe ihr könnt mir es vielleicht in einfachen Beispielen veranschaulichen.

    Mein Verständnisproblem liegt darin, daß es nicht in meinem Schädel passt, wie ein Besucher einer Seite wieder erkannt wird und er nicht mit einem anderen Besucher verwechselt wird.

    Ich habe dazu hier im Forum einige interessante Posts gelesen unter anderem diesen hier. Dort habe ich versucht folgenden Teil nachzuvollziehen aber irgendwie kappiere ich es nicht:
    PHP-Code:
    // von Abraxax
    <?php
    session_start
    ();

    // du musst auch erst einmal die werte in die session eintragen.
    $_SESSION['wert1'] = isset($_POST['wert1']) ? $_POST['wert1'] : '';
    $_SESSION['wert2'] = isset($_POST['wert2']) ? $_POST['wert2'] : '';

    echo 
    $wert1;                // ==> LEER
    echo "<p>";
    echo 
    $_SESSION['wert1'];    // ==> NICHT MEHR LEER
    echo "<p>";
    echo 
    $wert2;                // ==> LEER
    echo "<p>";
    echo 
    $_SESSION['wert2'];    // ==> NICHT MEHR LEER
    ?>
    html>
    <head>
    </head>
    <body>
    <form method="POST" action="seite3.php?<?php echo SID?>">
    <p><input type="text" name="wert3" size="4"></p>
    <p><input type="text" name="wert4" size="4"></p>
    <input type="hidden" name="PHPSESSID" value="<?php echo session_id(); ?>">
    <p><input type="submit" value="Abschicken" name="B1">
    </form>
    </body>
    </html>
    Hier wird die Session_id mittels URL weitergereicht, aber es wird doch nirgendwo diese per URL übermittelte session_id wieder eingelesen, sondern es wird wieder mit session_start() angefangen. Nach meinem Verständnis müßte doch die session_id an session_start() übergeben werden etwa so session_start('PHPSESSID'); oder ähnlich, damit der Server weiß aus welcher Session-Datei die Daten zu holen sind Versteht ihr, was ich meine?
    Noch was hier im Code: action="seite3.php?<?php echo SID; ?>". Woher kommt auf einmal SID her? Sollte es nicht 'PHPSESSID' heißen?

    Hoffe ihr könnt mich etwas aufklären.

    Vielen Dank
    Gruß, Otto

  • #2
    hmm,

    session_start() erzeugt eine Session (oder nimmt die aktuelle, basierend auf der Session-ID, die über eine GET-Variable oder ein Cookie übermittelt wurde, wieder auf).
    php-handbuch

    woher das SID kommt,

    generell ists aber so, daß du entweder die sid per cookie mitschleifst, oder sie (automatisch) an die url gehängt wird (trans_sid php.ini), in außnahmefällen mußt du sie per hand dranhängen ...
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Original geschrieben von derHund
      woher das SID kommt,
      das ist eine konstante die i.d.r. automatisch definiert wird. wird sie es nicht, kannst/musst du dies manuell machen. (is_)define(d)() hilft dir dabei.
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        hallo,

        oder nimmt die aktuelle, basierend auf der Session-ID, die über eine GET-Variable oder ein Cookie übermittelt wurde, wieder auf
        Wie erkennt denn session_start(), welche Variable in der URL für die Session_id steht? Angenommen ich möchte mehrere Variablen und die Session_id per URL übergeben. etwa so:
        Code:
        session_test.php?forum_id=123&user=Otto&meinesession=2e189801094436901f5444f265f59321
        Woher weiß denn session_start(), daß "meinesession" die Session_id enthält? Oder muß immer der Variablenname von der Session_id "SID" oder "PHPSESSID" heißen, damit die Session_id von Session_start() erkannt wird?

        Gruß, Otto

        Kommentar


        • #5
          weil du entweder nen namen festlegst, oder sonst der voreingestellte genommen wird? schau doch mal da, wo mein zitat herstammt ...
          Die Zeit hat ihre Kinder längst gefressen

          Kommentar


          • #6
            langsam schnalle ich es

            oder sie (automatisch) an die url gehängt wird (trans_sid php.ini)
            Ich habe in php.ini folgendes nachgelesen:
            ; trans sid support is disabled by default.
            ; Use of trans sid may risk your users security.
            ; Use this option with caution.
            ; - User may send URL contains active session ID
            ; to other person via. email/irc/etc.
            ; - URL that contains active session ID may be stored
            ; in publically accessible computer.
            ; - User may access your site with the same session ID
            ; always using URL stored in browser's history or bookmarks.
            session.use_trans_sid = 0
            Das ist doch ziemlich übele Sache oder? Man könnte dieses Sicherheitsloch zum Teil stopfen, in dem der Besucher expliziet auf ein "Abmelde-Taste" anklickt und daruf wird die session_destroy() aufgerufen, aber das ist nicht immer der Fall. Manche Benutzer schließen einfach den Browser und das war's ohne sich abzumelden, dabei ist die Session_id in der URL im Verlauf des Browser weiter gespeichert. Bei Cookies sieht es doch nicht besser aus oder? Die session_id bleibt im Cookie weiter erhalten, auch wenn der Browser geschlossen ist.

            in außnahmefällen mußt du sie per hand dranhängen ...
            Hast du dafür ein lebendiges Beispiel?
            das ist eine konstante die i.d.r. automatisch definiert wird. wird sie es nicht, kannst/musst du dies manuell machen. (is_)define(d)() hilft dir dabei.
            in der php.ini ist
            Code:
            session.name = PHPSESSID
            definiert aber SID ist nicht definiert.
            Ich kann doch
            PHP-Code:
            <form method="POST" action="seite3.php?<?php echo PHPSESSID?>">
            nehmen da
            Code:
            <input type="hidden" name="[COLOR=red][B]PHPSESSID[/b][/COLOR]" value="<?php echo session_id(); ?>">
            oder muß es unbediengt SID heißen?
            weil du entweder nen namen festlegst, oder sonst der voreingestellte genommen wird?
            Ich habe es dort nachgelesen und glaube du meinst
            Code:
            session.name = PHPSESSID
            in der php.ini?

            Danke
            Otto

            Kommentar


            • #7
              Re: langsam schnalle ich es

              Die session_id bleibt im Cookie weiter erhalten, auch wenn der Browser geschlossen ist.
              ; Lifetime in seconds of cookie or, if 0, until browser is restarted.
              session.cookie_lifetime = 0
              ; Document expires after n minutes.
              session.cache_expire = 180

              schau dir mal deine php.ini an, einer dieser werte ist dafür zuständig, , ich setze es afaik in der .php datei driekt, kann aber grad nicht nachschauen ...

              Hast du dafür ein lebendiges Beispiel?
              PHP-Code:
                  function goToLocation($Location "") {
                    if (
              $Location == "" || substr($Location01) == "?")
                      
              $Location $_SERVER["PHP_SELF"].$Location;
                    
              $Location explode ("#"$Location);
                    if (isset(
              $_POST["PHPSESSID"])) {
                      
              $Location[0] = (preg_match("/\?/i"$Location[0]))
                        ? 
              $Location[0]."&PHPSESSID=".$_POST["PHPSESSID"]
                        : 
              $Location[0]."?PHPSESSID=".$_POST["PHPSESSID"];
                    }
                    elseif (isset(
              $_GET["PHPSESSID"])) {
                      
              $Location[0] = (preg_match("/\?/i"$Location))
                        ? 
              $Location[0]."&PHPSESSID=".$_GET["PHPSESSID"]
                        : 
              $Location[0]."?PHPSESSID=".$_GET["PHPSESSID"];
                    }
                    
              header ("Location:".implode("#"$Location));
                    die();
                  } 
              ersetzt den
              PHP-Code:
                    header ("Location: ... 
              aber nur als beispiel, die funktion ist schon etwas ... *hüstel ... älter. man möge mir die nicht-korrekte angabe im location-header verzeihen ...

              Ich kann doch
              PHP-Code:
              <form method="POST" action="seite3.php?<?php echo PHPSESSID?>">
              nehmen da
              du kannst auch
              ; The URL rewriter will look for URLs in a defined set of HTML tags.
              ; form/fieldset are special; if you include them here, the rewriter will
              ; add a hidden <input> field with the info which is otherwise appended
              ; to URLs. If you want XHTML conformity, remove the form entry.
              ; Note that all valid entries require a "=", even if no value follows.
              url_rewriter.tags = "a=href,area=href,frame=src,input=src"
              verwenden ...
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Hallo,

                die Sache mit "URL rewriter" habe ich nicht so richtig verstanden, aber es ist vielleicht höher als mein Niveau

                Ich habe was anderes probiert und zwar: Ich habe einfach
                PHP-Code:
                <?php echo SID?>
                <input type="hidden" name="PHPSESSID" value="<?php echo session_id(); ?>">
                weggelassen, trotzdem wird die session_id übermittelt. Vielleicht meintest du auch
                generell ists aber so, daß du entweder die sid per cookie mitschleifst, oder sie (automatisch) an die url gehängt wird (trans_sid php.ini),
                mit "automatisch" das?

                PHP-Code:
                $_SESSION['wert1'] = isset($_POST['wert1']) ? $_POST['wert1'] : ''
                Kann mir jemand erklären, was hier genau passiert? Ist es eine Art If-Anweisung (hatte irgendwo gelesn, aber ich finde es nicht wieder)? Wenn $_POST['wert1'] gesetzt ist dann registriere wert1 = $_POST['wert1'] oder?
                "?" bedeutet If
                :'' bedeutet was???

                Gruß, Otto
                EDIT:
                Achso, hier habe ich ein anderes Beispiel gefunden:
                PHP-Code:
                <?php
                if ($var 5)
                {
                   
                $answ $var1;
                }
                else
                {
                   
                $answ $var2;
                }
                ?>
                But there is a much shorter way:

                <?php
                $answ 
                = ( $var $var1 $var2 );
                /* $result = ( $expression ? $return_if_true : $return_if_false ) */
                ?>

                Jetzt weiß ich es wieder
                Zuletzt geändert von otto-mueller; 22.02.2004, 20:55.

                Kommentar


                • #9
                  Ich habe einfach

                  PHP-Code:
                  <?php echo SID?>
                  <input type="hidden" name="PHPSESSID" value="<?php echo session_id(); ?>">
                  weggelassen, trotzdem wird die session_id übermittelt.
                  logisch, wenn trans_sid an ist!!!

                  Kommentar


                  • #10
                    logisch, wenn trans_sid an ist!!!
                    in meiner php.ini ist
                    Code:
                    session.use_trans_sid = 0
                    doch deaktiviert oder?

                    Kommentar


                    • #11
                      noch mal zu
                      PHP-Code:
                      $_SESSION['wert1'] = isset($_POST['wert1']) ? $_POST['wert1'] : ''
                      Besser gesagt zu der Schreibweise: kann man in dieser Schreibweise nur den "If-Teil" haben - also ohne den "else-Teil" ? Ich finde diese Schreibweise bei kurzen Bediengungsaufstellungen sehr angenehm. Ich habe es mit
                      PHP-Code:
                      $_SESSION['wert1'] = isset($_POST['wert1']) ? $_POST['wert1']; 
                      versucht, es kommt immer die Fehlermeldung unexpected ';' ?

                      Kommentar


                      • #12
                        Original geschrieben von otto-mueller
                        Besser gesagt zu der Schreibweise: kann man in dieser Schreibweise nur den "If-Teil" haben - also ohne den "else-Teil" ?
                        nein, du musst etwas angeben, das will dir auch die fehlermeldung sagen
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar

                        Lädt...
                        X