Marion: session_start

Ich hab da ein kleines Problem. Ich möchte einen Login programmieren, damit man nicht nur die URL eingeben kann, um auf die Adminseiten zu kommen.
Mann sollte sich zuerst anmelden und erst dann etwas ändern können.
Wie mach ich das?

  1. Hi Marion, -> Anrede ist höflich

    Ich hab da ein kleines Problem. Ich möchte einen Login programmieren, damit man nicht nur die URL eingeben kann, um auf die Adminseiten zu kommen.
    Mann sollte sich zuerst anmelden und erst dann etwas ändern können.
    Wie mach ich das?

    Du gehst z.B. auch http://www.php.net und suchst nach session_start, oder session im Allgemeinen, dort findest Du Hinweise und Beispielskripte.
    Dann probierst Du diese aus und fragst wieder, wenn Probleme auftreten (selbstverständlich in diesem Thread :))

    ciao
    romy -> Tschüssi sagen auch

    1. ich hab das ja schon gemacht!!!!!
      aber normal muss ich ja bei jeder datei die man nicht einfach so aufrufen kann am beginn session_start schreiben. aber das funkt nicht!

      1. Hi Marion,

        ich hab das ja schon gemacht!!!!!

        Du plenkst und begrüsst immer noch nicht.
        Dann zeige doch mal ein paar Quellcodezeilen, damit man nachvollziehen kann, was passiert. Ansonsten wäre eine ausführliche Fehlerbeschreibung sinnvoll, da wir alle keine Glaskugeln dabei haben.
        Was funktioniert nicht?
        Was soll passieren, bei welchen Tätigenkeiten? Was passiert stattdessen?

        aber normal muss ich ja bei jeder datei die man nicht einfach so aufrufen kann am beginn session_start schreiben.

        Das stimmt, aber es muss auch bei der Logiunseite stehen, da diese sonst die Variablen gar nicht schreibt, dann muss auch eine Abfrage drin sein, nur Session_start reicht natürlich nicht :)

        ciao
        romy, die etwas irritiert ist, über so viel unhöflichkeit, wenn man eigentlich etwas wissen will.

        1. Hallo LIEBE ROMY!

          danke für die vielen hilfreichen tipps! leider funkt es immer noch nicht. aber mittlerweile ist es mir egal. ich versuchs anderst zu lösen!

          DANKE UND TSCHÜSSI!

          1. Hi Marion ,

            Hallo LIEBE ROMY!

            <besserwissermode>na also, warum nicht gleich so<besserwissermode> ;))

            danke für die vielen hilfreichen tipps! leider funkt es immer noch nicht. aber mittlerweile ist es mir egal. ich versuchs anderst zu lösen!

            Wer wird denn gleich aufgeben ;)
            Es ist wirklich kein Problem.
            Mit etwas mehr Problembeschreibung bekommst du hier definitiv die Hilfe die Du brauchst.

            Seite1:

            Login-Formular, senden Daten an check.php

            Seite2: (check.php
            Prüft die Daten des Logins ab (entweder aus einer DB, oder einer textdatei oder hartkodiert im Quelltext)
            Wenn Sie stimmen, werden die Session_Variablen Login und Passwort gesetzt ( ja es erfolgt ein session_start davor)
            Weiterleitung an die anderen Seiten.

            Seite3...unendlich

            Session_start
            Abfrage ob die logindaten stimmen, wenn ja: Anzeige der Seite, snsonsten weiterletung zum loginskript.

            ciao
            romy

      2. ich hab das ja schon gemacht!!!!!
        aber normal muss ich ja bei jeder datei die man nicht einfach so aufrufen kann am beginn session_start schreiben. aber das funkt nicht!

        Jap schon session_start(); genau so, sorry aber bei mir funkt das echt einwandfrei und wie der Kollege schon sagt, unzählige Beispiele im Netz machen es genauso.

        Aber wie war das gemeint mit session_register macht man nicht mehr, hab anscheinend gepennt, ich bin noch auf dem session_reigster Pflaster hängen geblieben. Angeblich macht man ja $_POST auch nicht mehr. Wie macht man es jetzt, blöde Frage ?

        Maze

        1. Hi ,

          Jap schon session_start(); genau so, sorry aber bei mir funkt das echt einwandfrei und wie der Kollege schon sagt, unzählige Beispiele

          ^^^^^^^^

          Also bitte ;) Kollege Kollege, wo kommen wir denn da hin? ;)))

          Aber wie war das gemeint mit session_register macht man nicht mehr, hab anscheinend gepennt, ich bin noch auf dem session_reigster Pflaster hängen geblieben. Angeblich macht man ja $_POST auch nicht mehr. Wie macht man es jetzt, blöde Frage ?

          $_POST ($_SESSION, $_GET) benutzt man schon, es sind nur die HTTP_SESSION_VARS, HTTP_POST_VARS, HTTP_GET_VARS uä. ersetzt worden.

          ciao
          romy

          1. Jap Romy,

            jetzt mal ganz unter Kollegen :-)
            das ist aber schon länger her, nein mir hat mal jemand geschrieben dass $_POST voll unaktuell sein soll ?

            Anscheinend nix dran, war nur ein Poser :-)

  2. Am besten du verwendest dazu noch eine MySQl-Datenbank.

    Das funktioniert dann folgendermaßen:

    In der MySQL Datenbank erstellst du eine neue Tabelle "Userdaten" mit 2 Spalten "Username" und "Passwort" einfach VARCHAR(255).

    Dort trägst du dann deine Testwerte ein.

    z.B. Username = Test
         Passwort = testpasswort

    Dann erstellst du ein Formular mit zwei Feldern. Der User gibt sein Passwort und seinen Benutzernamen in ein Formularfeld ein.

    Dann kommt die PHP-login-Seite.

    Du übergibst die Variablen per Post und machst eine Datenbank abfrage. Existieren die übertragenen Werte in der entsprechenden Spalte der DB, dann wird eine session gestartet und in dieser wird die $eingeloggt = true gestetzt. Existieren die Werte nicht wird die Variable auf = false gesetzt und die session_destroy.

    Wenn die Variable true ist, dann noch session_register den Benutzernamen.

    Dann schreibst du eine if-Schleife, wenn $eingeloggt = true gehe weiter auf die eigentliche Seite, wenn false gehe zurück und wirf eine error message aus.

    Um die Seite, welche nur per Login erreichbar sein sollen zu schützen, muss diese Seite eine PHp Seite sein. und in dieser muss dann eine if-Schleife mit session_is_registered sein. Wenn die Session existiert kommt der User drauf ansonsten nicht.

    Klingt kompliziert, ist es aber nicht.

    Grüsse
    Maze

    1. Hi Matze,

      Am besten du verwendest dazu noch eine MySQl-Datenbank.

      oder Postgres, die ist viel schöner :)

      Wenn die Variable true ist, dann noch session_register den Benutzernamen.

      nein, bei den neueren PHP-Versionen benutzen wir session_register uä. nicht mehr, sondern schreiben direkt in das Session-Array

      Klingt kompliziert, ist es aber nicht.

      Ack
      es gibt unzählige Beispiele im Netz
      http://www.google.de/search?sourceid=navclient&hl=de&ie=UTF-8&oe=UTF-8&q=php+login+skript

      ciao
      romy

    2. Hello Matthias,

      Du übergibst die Variablen per Post und machst eine Datenbank abfrage. Existieren die übertragenen Werte in der entsprechenden Spalte der DB, dann wird eine session gestartet und in dieser wird die $eingeloggt = true gestetzt. Existieren die Werte nicht wird die Variable auf = false gesetzt und die session_destroy.

      Wenn die Session sowieso zerstört wird, braucht man auch nicht mehr false reinzuschreiben...

      Wenn die Variable true ist, dann noch session_register den Benutzernamen.

      Wenn der Benutzer authentifiziert wurde, dann kann man mit

      $_SESSION['username'] = $_POST['username'];

      z.B. noch den Benutzernamen in die Session schreiben.
      session_register() sollte man aber nicht mehr benutzen, wenn die PHP-Version >= 4.1.x ist.

      Dann schreibst du eine if-Schleife, wenn $eingeloggt = true gehe weiter auf die eigentliche Seite, wenn false gehe zurück und wirf eine error message aus.

      If-Schleifen gibt es nicht, aber if-Bedingungen und if-else- oder if-elseif-else-Verzweigungen. Aber das meintest Du bestimmt ;-)

      Der Ordnung halber benötigt man dann noch eine Funktion, die in jedem Script gleich nach Session_Start() aufgerufen wird und den Bentuzer identifiziert. Die Rechte sollte man immer frisch aus der Datenbank holen, damit durchgeführte Änderungen bereits beim nächsten Request des Users effektiv werden.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    3. Moin!

      Am besten du verwendest dazu noch eine MySQl-Datenbank.

      Wozu das? Lohnt sich wirklich nur, wenn man mehr als hundert Besucher hat, die regelmäßig und zahlreich zugreifen, aber nicht für einen einzelnen Administrator.

      Du übergibst die Variablen per Post und machst eine Datenbank abfrage. Existieren die übertragenen Werte in der entsprechenden Spalte der DB, dann wird eine session gestartet und in dieser wird die $eingeloggt = true gestetzt. Existieren die Werte nicht wird die Variable auf = false gesetzt und die session_destroy.

      Falsch.

      Die Session wird immer gestartet.

      Aber nur wenn man sich erfolgreich eingeloggt hat, wird das in z.B. $_SESSION['logged_in']=true gespeichert - schlauerweise sichert man danach noch die aktuelle Zeit als $_SESSION['last_access']=time() um bei späteren Zugriffen festzustellen, ob nicht schon zuviel Zeit seit dem letzten Zugriff vergangen ist.

      Wenn die Variable true ist, dann noch session_register den Benutzernamen.

      "session_register benutzen wir nicht mehr..." :)

      Um die Seite, welche nur per Login erreichbar sein sollen zu schützen, muss diese Seite eine PHp Seite sein. und in dieser muss dann eine if-Schleife mit session_is_registered sein. Wenn die Session existiert kommt der User drauf ansonsten nicht.

      Wow. Nur ein Absatz, aber drei fette Fehler drin.

      • IF-Schleifen gibt es nicht.
      • session_is_registered ist ebenso böse wie session_register. Man verwendet es nicht mehr!
      • Die Existenz einer Session ist kein Beweis für irgendwas! Jeder Benutzer kann sich eine Session generieren, wie er möchte. Es kommt darauf an, was in $_SESSION drinsteht.

      - Sven Rautenberg

      --
      "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
      1. Moin!

        Am besten du verwendest dazu noch eine MySQl-Datenbank.

        Wozu das? Lohnt sich wirklich nur, wenn man mehr als hundert Besucher hat, die regelmäßig und zahlreich zugreifen, aber nicht für einen einzelnen Administrator.

        Ist einfach komfortabler !

        Du übergibst die Variablen per Post und machst eine Datenbank abfrage. Existieren die übertragenen Werte in der entsprechenden Spalte der DB, dann wird eine session gestartet und in dieser wird die $eingeloggt = true gestetzt. Existieren die Werte nicht wird die Variable auf = false gesetzt und die session_destroy.

        Falsch.

        Die Session wird immer gestartet.

        Gestartet schon ist aber der Username falsch sollte die Session gelöscht werden !

        Aber nur wenn man sich erfolgreich eingeloggt hat, wird das in z.B. $_SESSION['logged_in']=true gespeichert - schlauerweise sichert man danach noch die aktuelle Zeit als $_SESSION['last_access']=time() um bei späteren Zugriffen festzustellen, ob nicht schon zuviel Zeit seit dem letzten Zugriff vergangen ist.

        Wenn die Variable true ist, dann noch session_register den Benutzernamen.

        "session_register benutzen wir nicht mehr..." :)

        Ja alder, ich habs verstanden, du bist nicht der erste der mir diese gloreiche Worte presst, schon mal die anderen Antworten gelesen, Schlaumeier !

        Um die Seite, welche nur per Login erreichbar sein sollen zu schützen, muss diese Seite eine PHp Seite sein. und in dieser muss dann eine if-Schleife mit session_is_registered sein. Wenn die Session existiert kommt der User drauf ansonsten nicht.

        Wow. Nur ein Absatz, aber drei fette Fehler drin.

        • IF-Schleifen gibt es nicht.

        Aha entschuldige Vielmals IF-Fallunterscheidung, bist du zufälig Lehrer an nem Gymnasium, Schwelg Schwelg Vergangenheit Schwelg !

        • session_is_registered ist ebenso böse wie session_register. Man verwendet es nicht mehr!

        Siehe oben !

        • Die Existenz einer Session ist kein Beweis für irgendwas! Jeder Benutzer kann sich eine Session generieren, wie er möchte. Es kommt darauf an, was in $_SESSION drinsteht.

        Das ist der einzige interessante Kommentar. Wenn du die Session Variable Benutzername ausliehst (die di vorher gespeichert hast) und nocheinmal mit den Werten der DB vergleichst....

        - Sven Rautenberg

        1. Moin!

          Wozu das? Lohnt sich wirklich nur, wenn man mehr als hundert Besucher hat, die regelmäßig und zahlreich zugreifen, aber nicht für einen einzelnen Administrator.

          Ist einfach komfortabler !

          Nicht wirklich. Hängt schlicht davon ab. Wer keine Datenbank hat, für den ist es ultraumständlich, erst eine zu kriegen - nicht komfortabler. Und außerdem ist es immer eine gute Idee, einen hartcodierten Zugang für den Super-Admin mit einzuprogrammieren - denn auch Datenbanken können mal abkacken.

          Falsch.

          Die Session wird immer gestartet.
          Gestartet schon ist aber der Username falsch sollte die Session gelöscht werden !

          Nein, warum?

          Die Session identifiziert den individuellen Browserbenutzer. Aber auch nicht mehr. Nur weil jemand ein falsches Passwort eingibt, muß er doch nicht gleich vergessen werden. Vielleicht will man die Anzahl der Fehlversuche dieses Individuums zählen.

          • IF-Schleifen gibt es nicht.
            Aha entschuldige Vielmals IF-Fallunterscheidung, bist du zufälig Lehrer an nem Gymnasium, Schwelg Schwelg Vergangenheit Schwelg !

          Nein, sollte ich?

          • session_is_registered ist ebenso böse wie session_register. Man verwendet es nicht mehr!
            Siehe oben !

          Wie weit oben?

          • Die Existenz einer Session ist kein Beweis für irgendwas! Jeder Benutzer kann sich eine Session generieren, wie er möchte. Es kommt darauf an, was in $_SESSION drinsteht.
            Das ist der einzige interessante Kommentar. Wenn du die Session Variable Benutzername ausliehst (die di vorher gespeichert hast) und nocheinmal mit den Werten der DB vergleichst....

          ...ja? Dann passiert was?

          - Sven Rautenberg

          --
          "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)