[Funktion] sessionmanagement und anmeldung auf einer Seite

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

  • [Funktion] sessionmanagement und anmeldung auf einer Seite

    Hallo, ich habe jetzt schon eie halbe Nacht "gegooglet", und hier im Forum gelesen - nix passendes gefunden.

    Bitte keinen Schreck kriegen es geht um Sessions in PHP, vielmehr um eine "Methode". Ich bastele an einer Internetseite, und diese hat ( ein Loginfenster in der Startseite.
    Der Login erfolgt ausschliesslich über diese Seite.

    Wenn ich das session_start() immer an den Anfang der Seite stelle, wird bei jedem Aufruf eine Session erzeugt (funktioniert auch grossartig), nun möchte ich aber erst nachdem Login die Session erzeugen.

    Mein Ansatz war, nachdem das Loginformular über method=Post gesendet worden ist, die Sesion zustarten.

    Wenn aber weiter über diese Seite navigiert wird, ist nach dem Anmelden ( ich frage über eine Klasse ab, ob das Loginformular abgeschickt ist) Schluss, da die Session dann ja nicht mehr gestartet wird.

    Kennt jemand ein Workaround mit einem Anmeldevorgang und einer Session-Aufrechterhaltung, welche sich auf einer einzigen Seite befindet ? Ich weiss das das Sicherheitsrisiken beinhaltet.

    Alles was ich gefunden habe ging nur über mehrere Seiten.

    Und auf eine Sessionvariable kann ich ja leider auch nicht referenzieren.

    p.s. es sit noch nichts im Netz - leider, nur auf meiner Testumgebung.

    Gruß und dank im Vorraus.
    ein weiser Mann hat immer mehr Fragen als Antworten :-) (Konfuzius)

  • #2
    Re: [Funktion] sessionmanagement und anmeldung auf einer Seite

    Original geschrieben von puhbär Wenn aber weiter über diese Seite navigiert wird, ist nach dem Anmelden ( ich frage über eine Klasse ab, ob das Loginformular abgeschickt ist) Schluss, da die Session dann ja nicht mehr gestartet wird.
    tj, das ist ein bisschen blöd du solltest dein konzept überdenken.

    also, die session muss immer gestartet werden. in der session speicherst du dann, ob der user angemeldet ist bzw. den status (gast, angemeldet, moderator, administrator ...)

    Kommentar


    • #3
      Re: [Funktion] sessionmanagement und anmeldung auf einer Seite

      Original geschrieben von puhbär
      Mein Ansatz war, nachdem das Loginformular über method=Post gesendet worden ist, die Sesion zustarten.
      .
      Dieser Ansatz bringt nichts. Richtig ist es, die Session immer zu starten, und den loginzustand in einer Variable $_SESSION['logged_in'] zu speichern. Die Session im php-sinn identifiziert nur das Terminal bzw. den Browser. Die Session im von-login-bis-logout-Sinn ist in der Variablen, bzw. dem Vorhandensein derselben.

      Es gibt ein Tutorial über login das etwa so funktioniert, http://www.php-resource.de/tutorials/read/38/1/

      kurze Begründung: man kann nicht mit vernünftigem Aufwand feststellen, ob eine Session besteht oder nicht. Mit einem klick in die history kommt man immer in eine alte Seite (va ohne Cookies). Hingegen kann man äusserst leicht feststellen, ob es die genannte variable gibt und/oder sie auf 'true' gestellt ist.
      (offtopic: letztere Formulierung ist ein allgemeines Problem, es wäre meiner Meinung nach einfacher, nicht vorhandene $_SESSION-Variabeln würden NULL geben anstatt einer Fehlermeldung. Auch offtopic: $logged_in = @$_SESSION['logged_in']; macht genau das.)
      Zuletzt geändert von mäander_; 15.07.2006, 09:25.

      Kommentar


      • #4
        Re: Re: [Funktion] sessionmanagement und anmeldung auf einer Seite

        Original geschrieben von mäander_
        man kann nicht mit vernünftigem Aufwand feststellen, ob eine Session besteht oder nicht.
        Warum nicht?

        Kommentar


        • #5
          weil das http-protokoll zustandslos ist.
          mfg

          Kommentar


          • #6
            Sry, ich kapiere nicht warum ich dann nicht testen kann ob die SESSION besteht oder nicht.

            Kommentar


            • #7
              wenn der User den Browser schließt, den Rechner ausschaltet
              und in Urlaub geht kriegt der Server davon gar nichts mit.

              Die Session läuft weiter.

              Der Server ist darauf angewiesen, daß er eine Anfrage vom Client
              kriegt - nur darauf kann er reagieren.

              Deswegen gibts den Sessiontimeout - nach einer bestimmten Zeit
              geht der Server davon aus, daß Du keine Lust mehr hast und beendet
              die Session.

              Bei jedem Zugriff auf eine Seite die session_start() beinhaltet "merkt"
              der Server daß Du noch da bist.

              ------

              Von sich aus kann der Server den Client nicht ansprechen um
              zu erfahren ob die Session weiterbestehen soll.
              Zuletzt geändert von Koala; 15.07.2006, 16:14.

              Kommentar


              • #8
                korrigiertes Konzept?

                Okay, überzeugt, es geht nicht.

                Wie gesagt ich bin mit der Authentifizierung in der Planung,
                wenn ich jetzt beispielsweise so wie Ihr es vorschlagt auf eine andere Seite umleite, habe ich eine zugegeben blöde Frage:

                Ich denke aber dazu sollte so ein Forum auch da sein, in allen Büchern die ich habe ("Franzis PHP5/MySql4, PHP5 Studienausgabe, Webseiten 2. Ausgabe, PHP5 Kochbuch und PHP Sicherheit")stehen solche Marginalien nicht drin.

                Ich mache eine Datei Namens "angemeldet.php", und nach einem Login auf der index.php wird der User über eine Abfrage zu "angemeldet.php" umgeleitet.

                Der Aufbau der Seite bleibt dann unverändert und die Klassen, die benutzt werden sind die der index.php. So habe ich was ich wollte.

                Macht das Sinn? Oder ist es aufgrund von traffic/ Performance besser für die einzelnen Seiten einzelne Klassen anzulegen - stelle ich mir in der Pflege schwieriger vor.

                Habe es vorher gesucht, aber wieder kein brauchbares Statement gefunden. (Vielleicht mache ich mir auch zuviel Gedanken über mein "Freizeitprojekt").

                Gruß und viele Dank
                ein weiser Mann hat immer mehr Fragen als Antworten :-) (Konfuzius)

                Kommentar


                • #9
                  Schreib die Klassen in eine Datei und binde Sie auf
                  den Seiten auf den sie benötigt werden per include ein.

                  Kommentar


                  • #10
                    Original geschrieben von jmc
                    Sry, ich kapiere nicht warum ich dann nicht testen kann ob die SESSION besteht oder nicht.
                    Sorry es gibt einfach keinen vernünftigen Test darauf. Solange du die session id nicht hast, weisst du nicht worauf prüfen. Und wenn Du sie hast ist die session schon da. Es ist wirklich viel einfacher, die php-session immer zu haben, und anhand einer Variabeln in $_SESSION zu wissen, ob man logged-in ist oder nicht. Darauf kannst du testen. Du kannst auch anhand von eigenen Variabeln in $_SESSION deine timeouts machen, sodass wenn user zB 600 sek nichts gemacht hat und wieder kommt, es zu spät ist. Gegen eine unendliche php-Session sprechen nur Argumente in der Achse von Session-Klau, und der ressourcen-Verbrauch im session-file directory.

                    Kommentar


                    • #11
                      Re: korrigiertes Konzept?

                      Original geschrieben von puhbär
                      Ich mache eine Datei Namens "angemeldet.php", und nach einem Login auf der index.php wird der User über eine Abfrage zu "angemeldet.php" umgeleitet.

                      Der Aufbau der Seite bleibt dann unverändert und die Klassen, die benutzt werden sind die der index.php. So habe ich was ich wollte.
                      Du kannst diegleiche Seite index.php weiter verwenden. Eine mögliche Logik ist:
                      Code:
                      <<index.php>>
                      session_start();
                      ist user logged_in so zeigst du den inhalt;
                      ist user nicht logged_in so analysierst du $_POST;
                      ist $_POST ok so leitest du weiter auf index.php (aus gewissen Gründen)
                      ist user nicht logged_in, kein (gültiges) $_POST: zeigst du login-fenster.
                      Die Teile können includes sein.
                      Man kann natürlich auch verschiedene inhalte.php haben für jeden Fall.

                      Kommentar

                      Lädt...
                      X