Login Script via Ajax

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Login Script via Ajax

    Hallo Leute, fand diese Seite dank Google :) Echt intersante Beiträge und HowTo´s hier :) Allso besten dank !

    Habe hier ein Threat gelesen, indem es um ein Login Script ging.
    Dieser Threat: easy-coding.de/login-t103.html

    Nun folgendes Problem:

    Quellcode

    1. if ($_POST['submit'] == 1)
    2. {
    3. $name = $_POST['name'];
    4. $pw = $_POST['pw'];
    5. if ($name == "QPMEDIA")
    6. {
    7. if($pw = "QPMEDIA")
    8. {
    9. header("location:/admin/index.php");
    10. } else {
    11. echo "Passwort ist Falsch";
    12. }
    13. } else {
    14. echo "User ist Falsch";
    15. }
    16. }
    17. echo '<html>
    18. <head>
    19. <title>Login Script</title>
    20. </head>
    21. <body>
    22. <form action="'. $_SERVER['PHP_SELF'].'" method="post">';
    23. ?>
    24. <input type="hidden" name="submit" value="1" />
    25. <fieldset><div><input type="text" name="name" value="Benutzername" class="mailing" onfocus='clearDefault(this)'></input></div>
    26. <div><input type="password" name="pw" value="passwort" class="mailing" onfocus='clearDefault(this)'></input></div>
    27. <div><input type="submit" value="Login" class="buttonmail"></input></div>
    28. </fieldset></form>
    29. </body>
    30. </html>
    Alles anzeigen


    Dies war der Code, bzw. ein etwas veränderter meinerseits. Folgende 3 Probleme bestehen hierbei:

    01. Bei falscher eingabe des Benutzernamens.. gibt das Script eine Fehlermeldung heraus, jedoch nicht bei einer falschen password eingabe.. man kommt trotzdem ins Adminmenü. Könnte man da eventuell auch ne fehlermeldung bekommen á la " Falsches Password"

    02. Wäre es möglich ( bezogen auf den Beitrag im Wiki ) die Usernamen bzw. passwörter auch in einer db.txt zu speichern und in md5 zu codieren ??

    03. Für mich die wichtigste Frage, da ich für dieses Problem IMMERNOCH keine antwort gefunden habe :(

    Folgendes:

    Wie schon in der Überschrieft erwähnt, soll sich das ganze über ein ajax fenster abspielen. Bei klick auf " Login " öffnet sich das ajaxfenster und da stehen die angaben aus dem obrigen php code... sprich benutzername und passwort.

    Ich möchte nun, das falls eine falsche eingabe gemacht worden ist, sei es benutzername oder password, die fehlermeldung im ajaxwindow erscheint und nicht in einem neuen fenster oder sonstwo... dazu muss ich sagen, dass ich für die ajax anwendungen " Thickbox " benutze.

    Link zu Thickbox: jquery.com/demo/thickbox/

    Dieses ermöglich mir, fenster, frames, iframes in einem ajax fenster zu öffnen ( wie bei lightbox ).. jedoch bezuge ich dafür den " Ajax Content " am ende der seite.
    Dieses hier: jquery.com/demo/thickbox/#sectionf-1

    nun wie könnte man das umsetzten ? ich bin echt am verzweifeln, würde mich echt über euere hilfe freuen. Grossen dank !

    Gruss QPMEDIA
  • ein login mit ajax ist natürlich auch möglich
    mit onsubmit kann man die ajax funktion aufrufen
    http://de.selfhtml.org/javascript/sprache/anzeige/onsubmit.htm

    zu frage1:
    Habe den Hinweis auf falsche Benutzerdaten nun eingebaut
    hier das Update:

    Quellcode

    1. if($login == false) {
    2. if($_POST['submit'] == 1)
    3. echo 'Fehler beim Login. Benutzername und/oder Passwort nicht korrekt.';
    4. else
    5. echo 'Bitte anmelden';
    6. require('login.php');
    7. die();
    8. }


    Frage2 erledigt sich ja, wenn du statt deines scriptes, das wiki script verwendest.
    Dieses speichert ja md5 verschlüsselt

    Zu Frage3: Da seit dem Update vor ~1 Woche keine Header Weiterleitung im Script ist, solltest du das Script nun in die Thickbox einbauen können.
    Habe Thickbox noch nicht benutzt, aber vorher könnte der header die Bremse gewesen sein
  • Hi !

    Zu 01:

    ich hab mir das mit onsubmit mal angeschaut. Jedoch suche ich keine JavaScript lösung in dieser Form. Ich möchte eine Ausgabe in dem Formular selbst, z.b über dem Benutzernamen.


    Zu 02:

    mit was genau muss ich das " Updaten " ersetzten ? Kannste mir das komplette mal mit dem Update wiedergeben, kein plan wo ich sie zeilen einsetzten soll und was ich löschen muss. :?


    Zu 03:

    meinst du mit dem " Update vor einer Woche " das Script aus dem Boardwiki ? Ist ja eigentlich egal welches ich benutzte ( ausser ich bestehe auf die md5 ) denn das tuts ja auch, das problem ist ja einfach nur das ich die verdammte ( :) ) ausgabe der errormessage nicht in die ajxform packen kann, ohne das es sich neu lädt bzw. die seite wechselt.

    Ich hänge mal nen screenshot an, was ich damit meine:

    Gruss
    Bilder
    • login_form_error.JPG

      152,56 kB, 915×674, 2.791 mal angesehen
    • login_form.JPG

      49,03 kB, 915×674, 2.758 mal angesehen
  • ohh.. du verweist ja auf einen post von 2004..
    nene, ich hab den link gar nicht geklickt.. dachte du meintest den post zum wiki beitrag
    aber das script von 2004 ist noch ohne sessions oder sonstiges - damit kann man nur eine einzige site schützen
    eine basis auf der du aufbauen kannst ist dieser wiki beitrag: [coderwiki]HowTos/PHP-Login-Registrierung-Tutorial[/coderwiki]

    aber mit ajax wird das schon etwas anders gehandelt...
    mit onsubmit="ajaxfunktion()" kannst du abfangen, dass die seite nicht neugeladen wird, sondern stattdessen eine ajax funktion aufrufen.
    ohne die wirst du also keinen erfolg haben

    ich muss gleich weg.. daher in kurzen worten...
    wenn du bis morgen nicht weiter gekommen bist, helf ich dir morgen weiter

    in der ajax funktion musst du die secure.php aufrufen.. diese speichert dann ein cookie, auf das die "hauptseite" auch zugreifen kann
    keine ausgabe = eingeloggt
    ausgabe = nicht eingeloggt + ausgabe des zurückgegebenen textes
  • Nochmal hallo, also ich sass da ne ziemlich lange Zeit, hab auch noch nen bissl gegooglelt, aber komm einfach nicht weiter :oops:

    zuerstmal zum Login aus dem Wiki:

    ich hab da einige Probleme, da es irgendwie nicht miteinander arbeitet oder ich keinen druchblick habe, ich weiss es ehrlich gesagt nicht.

    Folgendes Problem: Ich rufe das script über die secure.php auf, das ist klar. Danach gebe ich Benutzernamen und Passwort ein, das ist auch klar. Wenn es falsch ist, kommt die fehlemeldung, das ist auch ok... nun kommts... wenn ich benutzernamen und password richtig eingebe, hab ich zwar zugriff auf die admin.php, die cookies werden auch gesetzt jedoch ist die " admin.php " immer leer :) Egal was ich hineinschreibe in die admin.php, ich bekomme immer ne leere seite.

    Ich habe mal das script, so wie ich es "etwas" verändert habe angehängt.

    02. zum thema Ajaxlogin und der [ onsubmit="ajaxfunktion()" ] Funktion, damit komm ich leider überhaupt nicht klar. d.h ich hab null schimmer wie ich das ganze umsetzten soll. Da bräuchte ich, wenn möglich, echt deine hilfe :roll: ich hock schon seit 2 tagen nur an diesem loginteil, nerft echt mitlerweile :cry:

    kurz und knapp, ich komm überhaupt nicht vorran im moment :/
    Dateien
    • LOGIN.rar

      (1,58 kB, 470 mal heruntergeladen, zuletzt: )
  • Hi !

    Ne also ich komm gar nicht mehr weiter :?
    Das einige was ich mitlerweile ausfindig machen konnte war dieses hier:

    Link zu Seite: Klick mich

    Das sind die Bibliotheksfunktionen die, die Thickbox verwendet, also sprich JQUERY.JS
    Unter AJAX sind die funktionen die benötigt werden um den callback durchzuführen.

    Das ist mal ein Beispiel, was ich im zusammenhang damit an source gefunden habe:


    Quellcode

    1. //You could write an Ajax post with a callback:
    2. $.post("login.php",
    3. {username: <<username input here>>,password: <<password input here>>},
    4. function(){
    5. //Result of post. Do a check on the response.
    6. });


    Bloss wie ich was genau damit anfangen soll is mir dato noch ein Rätsel :oops:
  • "QPMEDIA" schrieb:

    Folgendes Problem: Ich rufe das script über die secure.php auf, das ist klar. Danach gebe ich


    Falsch ;)

    Du rufst das script über die admin.php auf

    in deinem fall (du hast es über verschiedene verzeichnisse verteilt, musst deine admin.php so aussehen)

    Quellcode

    1. <?php chdir('..'); require('secure.php'); ?>CONTENT


    dann noch eine Optimierung in der secure.php:
    entferne die whitespaces beim abfragen (Wiki Version hab ich aktualisiert)

    Quellcode

    1. foreach($file as $row) {
    2. ...
    3. $user = trim($row[0]);
    4. $password = trim($row[1]);



    //UPDATE
    angehängt findest du ein Ajax Login Beispiel... der code ist zu 90% mit der Wiki Version identisch und wurde nur um ein bisschen AJAX erweitert
    Dateien
    • ajax-login.zip

      (1,85 kB, 606 mal heruntergeladen, zuletzt: )
  • Hi d0nut,

    erstmal danke das du dir die Mühe gemacht hast 8)

    Update: Also das angehängte Script funktioniert einwandfrei, aber nicht auf die Art und Weise wie in meinem Screenshot. Wenn ich die admin.php einfüge auf der seite und es mit dem klick auf den link aufrufe, ist das Loginfeld leer. Und wenn ich z.b die secure.php anstelle der admin.php dort einfüge, ersscheint zwar das feld Benutzername und Passwort, jedoch bei richtiger oder falschen angaben, schliesst sich das Fenster einfach und es wird keine aktion ausgeführt :(

    Dann hab ich das LoginScript das ich angehängt hatte ( das mit den Unterordnern ) updatet wie du es beschrieben hast, jedoch hab ich da das problem, wenn ich die cookies lösche und dann erneut anmelden will, wird der cookie automatisch gesetzt und ich komm in den adminbereich. Versteh ich net :)

    Schauste mal bitte nach, was das problem ist ? Jetzt schonmal danke !!!!!

    Gruss QP-
  • das 2te problem existiert, weil die session zusätzlich zum cookie irgendwo im browsercache ist..

    du kannst dir eine logout.php erstellen mit folgendem inhalt

    Quellcode

    1. <?php
    2. session_start();
    3. session_destroy();
    4. ?>


    @problem1: du hast recht - das script ist bewusst simpel gehalten, damit man es in wiki und co verwenden kannst
    aber gerne helfe ich dir auch beim vollständigen aufbau, wie du es haben willst

    erläuter mir mal genau den ablauf
    1. user gelangt auf startseite
    2. user klickt auf admin (??)
    3. startseite bleibt im hintergrund - loginfeld poppt auf
    4. logineingabe OK -> wechsle die seite zu admin.php (reales wechseln/ ohne ajax)
    5. logineingabe FALSCH -> zeige das sofort im ajax popup an
  • Erstmal danke das du mir da weiterhilfst :)

    Ok, also zur Problematik, in meinem Falle:

    Schritt 01: Die Seite wird aufgerufen -> http://www.domain.de/
    Schritt 02: Die Person die sich einlogen will, klickt auf den Link "Login" ( im Screenshot oben rechts zu sehen )
    Schritt 03: Wenn man auf den Loginlink klickt passiert folgende aktion aus THICKBOX:

    Quellcode

    1. <a href="admin/admin.php?height=125&amp;width=220" class="thickbox">login</a>

    Schritt 03: dann öffnet sich ( wieder wie auf den Screenshots ) das AjaxFenster ( dafür benutze ich THICKBOX in Verbindung mit der JQUERY Bibliothek )
    Schritt 04: da sieht man "Benutzername", "Passwort" und "Login"
    Schritt 05: das formular wird, wie in Schritt 03 beschrieben, aus der Datei z.b admin.php geladen
    Schritt 06: Jetzt soll folgendes Passieren: Person "XYZ" klick auf Login, schreibt beim Benutzernamen und beim passwort, falsche Angaben. Dann soll wie auf dem Screenshot, eine Fehlermeldung ausgeben werden.
    Schritt 07: Aber wenn die Angaben richtig sind, soll er in den Adminbereich bzw. Userbereich der Seite weitergeleitet werden und das in einem neuen Fenster, also _blank.

    Kurz gesagt, so ungefäht wie du es gerade beschrieben hast :)


    UPDATE: Hab dafür ein kleines Video erstellt, da wird mein Problem besser beschrieben. KLICK MICH


    Gruss QP-
  • *g* coole idee mit dem video

    aber die änderungen waren wirklich nur minimal
    ich behalte den aber lieber weiterhin kompakt, als andere (und natürlich mich) zu bemühen in die ajax libraries einzuarbeiten

    zur übersicht hab ich dir das vollständige script angehängt.
    hier die erläuterungen der änderungen

    secure.php
    um das login formular habe ich eine box gezaubert:

    Quellcode

    1. <div style="position:absolute;left:20%;top:100px;width:300px;border:1px solid #000000">


    admin.php und index.php habe ich aufgetrennt
    bei der admin.php wird gleich beim aufruf der loginstatus überprüft und falls kein login existiert das popup eingeblendet

    das ajax script hab ich in ajax.js ausgelagert und 1 änderung vorgenommen

    Quellcode

    1. if(login == true && feedback.substr(0,11) == "<!--OK//-->")
    2. document.location.href = "admin.php";
    3. else if(login == false)
    4. document.getElementById('maincontent').innerHTML = feedback;
    5. else
    6. document.getElementById('content').innerHTML = feedback;


    in maincontent soll der geschützte inhalt geladen werden
    und das if überprüft ob eben gerade angemeldet wurde - falls ja, wird man weitergeleitet
    Dateien
  • hehe, jo das Video war mal wieder eine gedankliche Höchstleistung von mir *G*

    Ich hab diverse Probleme mit dem Login, z.b wenn man die errormessage kommt, steht die Anmeldemessage noch da :) Irgendwie übereinander. Ich schaus mir noch genau an, aber hab eigentlich vorerst keine anderen Probleme :) Dank dir d0nUt ;)
  • So ich hab mich jetzt mal mit dem Macher von JQUERY in kontakt gesetzt... der mir kurzerhand erklären wollte, wie das ganze funtzt.. da es auf die andere art und weise irgendwie nicht hingehauen hat bei mir.

    Hier mal Teile der Email:

    Ich denke, was du brauchst, ist das "offizielle" form plugin. Eine Beispielseite dazu gibt es hier: http://www.malsup.com/jquery/form/
    Folgendes müsstest du dann mit Hilfe des form plugins implementieren:
    Bei Klick auf Login wird die Form per ajax abgeschickt. Auf Serverseite werden Benutzername und Passwort geprüft und entsprechend ein Status zurückgesendet. Per Callback prüfst du diesen Status. Sind die daten in Ordnung, sendest du die Form ganz normal ab, sind sie nicht in Ordnung, zeigst du eine entsprechende Fehlermeldung an.
    Das sollte dann in etwa so aussehen:

    Quellcode

    1. $(document).ready(function() {
    2. // bei submit der Form mit der id 'loginform' soll der Rückgabewert
    3. // in das Element mit der ID 'output' geladen und der callback 'after'
    4. // ausgeführt werden
    5. $('#loginform').ajaxForm('#output', after);
    6. });
    7. function after(content) {
    8. if(!content) {
    9. // wenn von serverseite nichts zurückkam, soll das formular ganz normal abgeschickt werden, ohne AJAX
    10. $('#loginform').submit();
    11. return false;
    12. }
    13. }
    Alles anzeigen


    Der Trick ist jetzt, auf der Serverseite festzustellen, ob ein Ajax-Request gesendet wurde und dementsprechend nichts oder eine Fehlermeldung zurückzusenden. Wenn hingegen ein normaler Request kommt, wird genauso geprüft ob die Daten in Ordnung sind, wenn ja, wird entsprechend die nächste Seite zurückgegeben. Auf die Art wird sichergestellt, das die Benutzerdaten auf jeden Fall serverseitig geprüft werden, bevor z.B. die Benutzerdaten in der Session gespeichert werden.


    Kein Plan was er will :) Weiss einer Rat ???
  • Hallo Leute,

    bei mir funzt das Script unter: [coderwiki]HowTos/PHP-Login-Registrierung-Tutorial[/coderwiki] nicht!

    Wenn ich zwei mal auf Login klicke, ohne dass ich etwas eingebe, kann ich mit trotzdem einloggen. Irgentwo ist da ein Fehler im Script.

    Ich habe es genau so übernommen wie es im Tut erklärt is, und die Dateien auch genauso benannt.

    Kann mir jemand helfen und sagen wo der Fehler liegt?