Funktionsweise von Sessions

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

  • Funktionsweise von Sessions

    Hallo,
    Versuche mich momentan an einem einfachen adminlogin,
    habe zu diesen Zweck eine Tabelle in meiner Datenbank erstellt mit,

    - ID
    - Username
    - Passwort (MD5 - Verschlüsselung)
    - sessionid

    So nun versuche ich mich mit meinen login, habe bereits das tutorial auf php-resource gelesen nur leider wird hierbei überall mit im verhältniss sehr großen Funktionen gearbeitet und ich würde dass gerne auch verstehen was ich da mache ?


    Also, ich habe meine admin.php mit einem formular dass passwort, und username übergibt, diese überprüfe ich ob diese vorhanden sind in der Datenbank, dass ist noch sehr einfach, und falls diese Überprüfung in ordnung ist, wird der geheime Adminbereich freigeschaltet.

    Ist alles noch einfach , doch ich könnte doch mir eine funktion basteln die immer Username und Passwort mit der Datenbank abgleicht, da stellt sich für mich die Frage wofür ich sessions denn überhaupt benötige ?

    Kann sich vielleicht einer erbarmen und mir dass kurz schildern ?

  • #2
    Re: Funktionsweise von Sessions

    Original geschrieben von christian000
    doch ich könnte doch mir eine funktion basteln die immer Username und Passwort mit der Datenbank abgleicht,
    Und wann und wo soll diese Funktion das machen?
    Das müsste sie ja dann auf jeder Seite tun - also müssten auf Username und Passwort mit jedem Seitenaufruf erneut übergeben werden.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ja und stattdessen wurden sessions eingeführt (anscheinend ?)
      ok nun starte ich eine session mit

      session_start();

      ok,... super und nun ? was brint mir dass ?

      Kommentar


      • #4
        werde dir darüber klar, dass http ein zustandloses protokoll ist und überleg dann mal, für was sessions eingesetzt werden könnten.
        mfg

        Kommentar


        • #5
          das ist eben mein problem ?
          ich habe keine ahnung wie dies funktioniert ?

          Kommentar


          • #6
            google liefert auch ergebnisse zur funktionsweise von sessions. z.B.

            http://de.wikipedia.org/wiki/Session-ID
            mfg

            Kommentar


            • #7
              Original geschrieben von christian000
              das ist eben mein problem ?
              ich habe keine ahnung wie dies funktioniert ?
              ist mir schon öfter aufgefallen, dass leute hier im forum verständnisprobleme von sessions haben.
              vielleicht schreibt mal jemand ein tut dazu?

              ok, ich versuchs mal kurz:

              stell dir vor, du startest auf deinem pc lokal ein programm. dort gibst du einen wert ein und dieser wert ist dem programm immer bekannt, solange das programm läuft - beendest du das programm und startest es neu, ist dieser wert weg (vorausgesetzt, der wert wird nicht im z.b. dateisystem gespeichert).

              so, nun sieh dir mal eine webapplikation an, konkret php. du rufst eine php-datei vom server auf, der webserver findet die datei startet ein programm(php) und liefert die ausgabe, dann wird das "php-programm" beendet und alle laufzeit-werte(variablen wie username und passwort) sind wieder weg. damit das nicht passiert, und sich php wie ein lokal laufendes programm auf deinem pc verhält, werden diese variablen auf dem server gespeichert, das geschieht mittels sessions. dabei wird dem client (browser) die session-id vom server übermittelt (get/post/cookie). requestet der client jetzt erneut den webserver, so kann sich dieser aufgrund der übermittelten session-id wieder an die alte sitzung erinnern, startet das php-programm und holt die gespeicherten werte wieder aus der session. damit verhält sich die webapplikation wie ein lokal laufendes programm auf deinem pc.

              hm, war zumindest ein versuch das zu erklären - hoffe, dabei ist etwas rübergekommen.
              Zuletzt geändert von 3DMax; 11.02.2007, 19:48.

              Kommentar


              • #8
                so. darf ich dass nun so verstehen

                man startet mit php die session, und kann der session dann variablen zuweisen. ?


                z.b. session['id']

                und diese session-"id" ist nun solange gültig bis ich meinen browser schließe und die session id ungültig ist (oder ich zerstörte die session -> session_destroy)?
                Somit brauche ich nur einmal user+passwort abfragen (login.php) diese dann mit der Datenbank abgleichen (passwort (login.php) == passwort (MySQL)) wenn dass dann der fall ist "einfach" die sessionvariable setzen die ich dann auf meinen folgeseiten verwenden will. ??


                Komplett Falsch verstanden oder nich ?

                Kommentar


                • #9
                  Nein, du scheinst das Prinzip kapiert zu haben. Du startest eine Session, dir wird eine Session-ID zugewiesen, die dich eindeutig identifiziert und die eine gewisse Zeit lang gültig ist, und hast die Möglichkeit, in dieser Session Variablen abzulegen. Das geschiet über die $_SESSION-autoglobale:

                  PHP-Code:
                  $_SESSION['key'] = 'value'
                  Hilfreiche Lektüre dazu gibt's hier:
                  Session Funktionen im PHP Handbuch.
                  Nieder mit der Camel Case-Konvention

                  Kommentar


                  • #10
                    Wenn ich nun meinen adminbereich konstruiere, was ist hierbei am günstigsten zu speichern ?

                    Ist es wirklich sicher nur die Userid zu speichern mit der ich eingeloggt bin und bei jeden aufruf einer seite zu prüfen ob diese Userid gültig ist ?
                    Oder besser passwort und username speichern und auf jeder seite checken ob diese vorhanden sind in meiner DB?

                    Oder ist das modell am sichersten in der ich meine Sessionid die ich erzeuge mit session_start() in der DB zu speichern und diese abzufragen , ob diese übereinstimmt ?

                    Kommentar


                    • #11
                      warum solltest du username und passwort prüfen. Bist du (bzw. dein Loginscript) der einzige, der daten in die session schreiben kann? dann reicht doch auch die einmalige Prüfung beim Login.

                      Kommentar


                      • #12
                        Es spricht nichts dagegen, die User-ID in der Session zu speichern. Das Passwort hingegen würde ich nicht speichern - wozu auch? Um zu überprüfen, ob ein Benutzer eingeloggt ist oder nicht, könntest du nach einem erfolgreichen Login eine Flag setzen, die darauf hinweißt, dass dieser Benutzer eingeloggt wurde.
                        PHP-Code:
                        // benutzername und passwort überprüfen

                        $_SESSION['is_logged_in'] = TRUE;

                        // um zu überprüfen, ob benutzer eingeloggt ist
                        if ($_SESSION['is_logged_in'])
                        {
                            
                        // eingeloggt
                        }
                        else
                        {
                           
                        // nicht eingeloggt

                        Ich würde dir aber empfehlen, bei jedem Request zu überprüfen, ob die Login-Sitzung noch gültig ist. Zum Beispiel würde ich einen Benutzer, der zu lange inaktiv gewesen ist, also nichts getan hat (idle time), ausloggen, und für einen Admin-Bereich auch Benutzer, die schon "zu lange" eingeloggt sind (expire time).
                        Nieder mit der Camel Case-Konvention

                        Kommentar


                        • #13
                          hmm... theoretisch ist es doch jeder php datei möglich meine session variablen zu manipulieren oder zu setzen ?

                          Die frage ist nun einfach wie ich hierbei am sichersten vorgehe ?
                          Angenommen ich überprüfe nur einmal username/passwort und diese stimmen mit dennen in meiner php datei überein, was ist die folge davon ?
                          Ich muss meinen folgeseiten weiß machen dass der user eingeloggt ist,

                          reicht es hierbei etwa einfach eine session variable
                          $_SESSION['ichbineingeloggt'] = '1';

                          und bei jeder seite nun abzufragen

                          if($_SESSION['ichbineingeloggt'] == '1')
                          {
                          geschütze bereich
                          }
                          else echo ("sorry, nichts für dich");

                          Kommentar


                          • #14
                            ups, sorry haben sich wohl überschnitten die beiden posts,


                            also speichere ich meine Sessionid in der DB und überprüfe ob diese noch gültig ist, und sollte hierbei noch einen zeit"check" miteinbauen.
                            (Bietet hierbei PHP eine funktion um eine expired-time festzulegen ?)


                            Naja ichglaube dass reicht fürs erste und ich werde mich einfach hinsetzen und mein wissen ausprobieren,

                            vielen dank für die geduld und euer aufkommen ;-)


                            ps. Könnte mir mal irgendwer meine EDIT rechte geben ? Kann man nicht mal seine eigenen posts ändern,...

                            Kommentar


                            • #15
                              Eine Built-in Funktion, um eine expire-Zeit festzusetzen? Nein, wozu auch? Das kannst du problemlos selbst machen. Mal ein simples Beispiel:
                              PHP-Code:
                              function auth_check_status()
                              {
                                  
                              $auth_idle_time 1500// 1500 sekunden

                                  
                              if (auth_idle_time && ($_SESSION['idle_time'] + $auth_idle_time) < time())
                                  {
                                      return 
                              'auth_idled';
                                  }

                                  
                              // idle_time "zurücksetzen", denn login ist noch gültig
                                  
                              if (is_logged_in())
                                  {
                                      
                              $_SESSION['idle_time'] = tmie();
                                  }

                              auth_check_status() wird dabei bei jedem Request aufgerufen. Nur mal um ein mögliches Prinzip zu erklären.
                              Nieder mit der Camel Case-Konvention

                              Kommentar

                              Lädt...
                              X