Der Dicki: Benutzererkennung mit "schönem" URI

Hallihallo!

Ich bin gerade dabei, mich in PHP einzuarbeiten, eine tolle Sache.
Während man das so tut, sich so viel neuen "Stoff reinzieht", bekommt man natürlich auch viele tolle Ideen, was man mit dem neu erlernten so Alles anfangen kann...

So grundelegende Dinge, wie z.B. ein billiges, selbstgemachtes Seitenbausystem, kriege ich mittlerweile hin. Will heißen, die Materie ist nicht mehr _ganz so sehr_ ein Buch mit sieben Siegeln für mich.

Jetzt stellt sich mir allerdings eine kleine Frage, wenn ich mir über die sogenannten Sessions so meine Gedanken mache:

Ist es möglich, diese blöden, ellenlangen Session IDs aus dem URI wegzulassen? Und das auch ohne Cookies?
Kurz gesagt: kann man einen Besucher, wenn er sich einmal eingeloggt hat, auch mit anderen Mitteln wiedererkennen?

Ich dachte da z.B. an eine Erkennung via IP, aber die dürfte wohl scheitern, wenn mehrere Leute gleichzeitig hinter einem Proxyserver sitzen, oder?

Eins vorweg: ich möchte lernen, also bin ich nicht auf der Suche nach Vorgefertigtem, ich suche lediglich einen Ansatz.

Besten Dank im Voraus, und viele liebe Grüße,

Der Dicki

  1. Hi, ich hab auch schon so einiges mit PHP realisiert, bei einer Seite hab ich einfach den Loginnick übergeben, was natürlich voll dumm aussieht.. du könntest auch einfach eine ID übergeben und im Script selber testen, ob die IP+ID dieselben sind wie die, die du beim einloggen in den $_SESSION Variablen speicherst. (Mithilfe der ID kannst du dann auch Datenbankabfragen starten, um den User zu identifizieren)

    hoffe ich hab dich auf einige Ideen gebracht

    mfg wing

    1. Hallihallo!

      Hi, ich hab auch schon so einiges mit PHP realisiert, bei einer Seite hab ich einfach den Loginnick übergeben, was natürlich voll dumm aussieht.. du könntest auch einfach eine ID übergeben und im Script selber testen, ob die IP+ID dieselben sind wie die, die du beim einloggen in den $_SESSION Variablen speicherst. (Mithilfe der ID kannst du dann auch Datenbankabfragen starten, um den User zu identifizieren)

      So etwas in der Art hatte ich ja vor. Meine Idee war eigentlich Folgende: auf meiner Seite
      http://www.ewetel.net/~tobias.hahner
      habe ich ein Javascript, mit dem man unter Anderem seine eigenen Notizen eingeben und (Chräcker möge mir verzeihen) auf die Seiten "stempeln" kann. Allerdings, mal abgesehen von der Mangelnden Optik, hat diese Lösung den Nachteil, daß die Notizen in einem Cookie gespeichert werden. Das täte ich liebend gerne umbauen, und die Notizen, und allen anderen selbstdefinierten Kram, serverseitig speichern lassen.

      Aber jetzt das eigentliche Problem: die URI der ganzen Seiten sind schon von Haus aus relativ lang, und der Übersichtlichkeit halber würde ich liebend gerne auf zusätzliche Angaben in der Addressleiste verzichten (zumal dadurch ja auch das Setzen von Lesezeichen nahezu unmöglich gemacht wird). Außerdem kann man ja nicht unbedingt davon ausgehen, daß ein Besucher die Kekse, die man ihm anbietet, auch annimmt.
      Und das Schwierigste: Jeder soll die Seiten sehen können. Wer nicht angemeldet ist, hat dann eben nur keine Möglichkeit, irgendwas zu speichern...

      Ich hoffe, damit konnte ich mein Anliegen deutlicher machen.

      Viele liebe Grüße,
      Der Dicki

      1. Hi Der Dicki,

        So etwas in der Art hatte ich ja vor. Meine Idee war eigentlich Folgende: auf meiner Seite http://www.ewetel.net/~tobias.hahner habe ich ein Javascript, mit dem man unter Anderem seine eigenen Notizen eingeben und (Chräcker möge mir verzeihen) auf die Seiten "stempeln" kann. Allerdings, mal abgesehen von der Mangelnden Optik, hat diese Lösung den Nachteil, daß die Notizen in einem Cookie gespeichert werden. Das täte ich liebend gerne umbauen, und die Notizen, und allen anderen selbstdefinierten Kram, serverseitig speichern lassen.

        Und das Schwierigste: Jeder soll die Seiten sehen können. Wer nicht angemeldet ist, hat dann eben nur keine Möglichkeit, irgendwas zu speichern...

        das heißt: wenn jemand keine cookies hat, kann er die seite trotzdem benutzen (ist ja auch eher ne spielerei als was elementar wichtiges, aber lustig isses schon:-)). bei der anderen methode (mit serverseitiger speicherung) können nur angemeldete benutzer speichern, und es gibt einen hässlichen URI.
        mein vorschlag: du lässt es bei den cookies (kannst die leute ja drauf hinweisen, dass es mit cookies komfortabler ist (wie da auch steht "geht nur mit javascript").

        Gruß, Marian

  2. Hello,

    Ist es möglich, diese blöden, ellenlangen Session IDs aus dem URI wegzulassen? Und das auch ohne Cookies?
    Kurz gesagt: kann man einen Besucher, wenn er sich einmal eingeloggt hat, auch mit anderen Mitteln wiedererkennen?

    Ja, mit HTTP Auth.
    Aber:
    1. Kommt dann zum Anmelden das berühmt-berüchtigte Anmeldefenster
    2. Musst Du dir den Sessionmechanismus dann selber schreiben,
       was aber auch nicht weiter wild ist, wenn Du erstmal alles verstanden hast.
       $_SESSION kannst Du trotzdem benutzen. Du könntest sogar soweit gehen,
       intern mit einer SesseinId zu arbeiten...

    Das HTTP Auth gefällt mir in sofern auch besser, da dabei eine Kontrolle von Missbrauch möglich ist. Wenn beide Teile des Zugangs-Schlüssels für sich selber acuh Unique sind, kann man erkennen,
    wenn jemand versucht, sich mit einem falschen Schlüssel anzumelden und später auch zuzugreifen.

    Bei den üblichen Session-Verfahren, die hier wohl von den meisten benutzt werden, kann man aber den falschen Zugangsversuch (also den mit einer ungültigen Session-ID) niemandem zuordnen und daher dessen Konto auch nicht schützen.

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

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hallihallo!

      Ja, mit HTTP Auth.

      Wenn ich das richtig verstanden habe, kann dann aber ein nicht angemeldeter Benutzer gar nicht mehr rein, oder?

      Ich hatte mir das so gewünscht, daß Jemand, der nicht angemeldet ist, zwar Alles sehen kann, aber auf ein paar Dinge verzichten muss.
      In (https://forum.selfhtml.org/?t=112181&m=708353) habe ich mal meine "Wunschliste" genauer formuliert. So langsam zweifle ich fast daran, daß es sich überhaupt so relisieren lässt, wie ich gehofft hatte.

      Viele liebe Grüße,
      Der Dicki

      1. Ahoi Der Dicki,

        Ich hatte mir das so gewünscht, daß Jemand, der nicht angemeldet ist, zwar Alles sehen kann, aber auf ein paar Dinge verzichten muss.

        wenn du die dinge, die nur ein angemeldeter sehen soll in einen unterordner schiebst ist das kein problem.

        MfG

        1. Hello,

          Ich hatte mir das so gewünscht, daß Jemand, der nicht angemeldet ist, zwar Alles sehen kann, aber auf ein paar Dinge verzichten muss.

          wenn du die dinge, die nur ein angemeldeter sehen soll in einen unterordner schiebst ist das kein problem.

          Ich mneine allerdings hier nicht das .htaccess-Verfahren von Apache, sondern einfach nur die Nutzung des HTTP-Headers

          function authenticate($ansage,$absage)
          {
            Header("WWW-authenticate: basic realm="$ansage"");
            Header("HTTP/1.0 401 Unauthorized");
            echo $absage;
            exit;
          }

          wobei $absage eine vollständige valide Webseite in einem String sein sollte (_nicht_ deren URL!).

          schreib Dir eine Funktion, die

          $_SERVER["PHP_AUTH_USER"]
          und
              $_SERVER["PHP_AUTH_PW"]

          auswertet und dann zurückgibt, ob der User gerade angemeldet ist. Die zugehörige Sessionnummer kannst Du auch in der entsprechenden DB speichern. Wenner sich anmelden soll, rufst Du die obige Funktion auf.

          Die Funktion musst Du dann in jedem Script am Anfang aufrufen.

          Normalerweise würde eine Session die Basis für ein Login-Check darstellen, also die Session ist schon da, wenn der User anfängt zu surfen, und das Login baut darauf auf.

          Hier wird die Session erst _erteilt_, wenn der User angemeldet ist und dann auch jedesmal wieder aufgenommen. Es gibt ja keine andere Möglichkeit, den User zu erkennen. Das war Deine Rahmenbedingung.

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

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hallihallo!

            Ich mneine allerdings hier nicht das .htaccess-Verfahren von Apache, sondern einfach nur die Nutzung des HTTP-Headers

            Aha, da laf also mein Denkfehler! Dann ist ja Alles klar, das werde ich mal ausprobieren.
            "Leider" kann ich niemanden an meinen Tests teilhaben lassen, weil sich gezwungermaßen Alles auf meinem localhost abspielt, bis ich einen passenden Hoster gefunden habe, der mir auch PHP- Unterstüzuung bietet.

            Aber recht vielen Dank für die Anregungen. Ich werde sie mir zu Herzen nehmen und weiter lernen :)

            Viele liebe Grüße,
            Der Dicki

            1. "Leider" kann ich niemanden an meinen Tests teilhaben lassen, weil sich gezwungermaßen Alles auf meinem localhost abspielt, bis ich einen passenden Hoster gefunden habe, der mir auch PHP- Unterstüzuung bietet.

              geh auf www.funpic.de da hab ich auch einen Account, die Seite ist völlig kostenlos und hat ne Datenbank und PHP-Unterstützung, allerdings dürfen keine Serverseitigen Games drauf laufen und die Max. Dateigröße ist auf 1 MB beschränkt, dafür ist aber der Webspace unlimited!

              Also zum Scripte testen, dürfte es völlig ausreichen ;)

              mfg wing

          2. Hallihallo!

            Ich habe da jetzt mal ein bißchen rumprobiert, und daraus ergibt sich eine weitere Frage:
            Mein Vorhaben war ja, so ähnlich wie hier im Forum, für angmeldete Besucher eine Art "benutzerspezifische Ansicht" und ein paar zusätzliche Funktionen zu bieten (die ja im Prinzip das Gleiche sind: wer angemeldet ist, bekommt eben einen "etwas modifizierten" Quelltext geliefert).

            Bei meinen Tests habe ich nun festgestellt, daß die von Dir vorgeschlagene Lösung mit $_SERVER['PHP_AUTH_USER'] und $_SERVER['PHP_AUTH_PW'] ja schon die komplette von mir gewünschte Funktionalität liefert.

            Das heißt dann doch, daß ich eine "Session" im ursprünglichen Sinne gar nicht mehr brauche, oder habe ich da etwas übersehen?

            Viele liebe Grüße,
            Der Dicki

            1. Hello,

              Das heißt dann doch, daß ich eine "Session" im ursprünglichen Sinne gar nicht mehr brauche, oder habe ich da etwas übersehen?

              Das ist richtig. Durch die beiden Credentials könnte die Session für den Benutzer (wenn denn eine feführt werden soll) eindeutig identifiziert werden. Das gilt, wenn mindestens einer der beiden Werte unique, also eineindeutig ist. Besser, man hält aber beide Werte unique.

              Harzliche Grüße vom Berg
              esst mehr http://www.harte-harzer.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Hallihallo!

                Was meinst Du mit unique?
                Klar, unique bedeutet eineindeutig, aber was genau ist damit gemeint?

                Meinst Du, es sollte jeden Nutzernamen und jedes Passwort nur genau einmal geben? Sollte doch reichen, wenn es jede Kombination genau einmal gibt, oder?
                (Falls Du nicht genau das gemeint haben solltest...)

                Viele liebe Grüße,
                Der Dicki

      2. Hello,

        Ja, mit HTTP Auth.

        Wenn ich das richtig verstanden habe, kann dann aber ein nicht angemeldeter Benutzer gar nicht mehr rein, oder?

        Das liegt doch daran, was Du programmierst.
        Es funktioniert aber nur bei PHP als Modul, nicht als CGI

        Ich hatte mir das so gewünscht, daß Jemand, der nicht angemeldet ist, zwar Alles sehen kann, aber auf ein paar Dinge verzichten muss.

        Das kannst Du doch auch so machen.
        Und dann baust Du einen Login-Button, der eben auf die Anmeldeseite verzweigt und nach erfolgreicher Anmeldung wieder zurück auf die Ausgangsseite. Der Nachteil dieser Methode ist nur, dass der Bentutzer sich nicht "abmelden" kann. Der Zugang bleibt solange erhalten, wie er ein auf der Anmeldebasis beruhendes Fenster ( auch Kindfenster ) geöffnet hält.

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

        Tom

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