Erweitertes Login Script

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

  • Erweitertes Login Script

    Hallo,
    Ich möchte gerne ein spezielles LoginScript programmieren.
    Allerdings verfüge ich erst über Basiswissen in PHP.

    Es soll wie folgt aussehen:
    Als Grundlage habe ich mir ein ganz normales LoginScript programmiert (ohne irgendwelche Besonderheiten).
    Das Problem ist nur, dass jedem Nutzer nur eine bestimmte Anzahl an Logins genehmigt werden soll und das der Account anschließend gesperrt wird.
    Ich habe mir das so vorgestellt, dass ich eine separate Spalte in meiner Tabelle habe, in der der Wert bei jedem Login um 1 erhöht wird.
    Ein weiteres Problem, dass ich noch habe ist, dass ich einen Schutz einbauen möchte, der es verhindert, dass jemand Ewigkeiten eingeloggt bleibt. Ähnlich wie z.B. bei einer Bank, wo man nach 15 Minuten Inaktivität ausgeloggt wird.

    Ich hoffe, dass mir jemand helfen kann oder evtl. eine andere Ideen hat, um das zu realisieren.

    Vielen Dank im Voraus

    Gruß
    gameco


    PS: Eine Frage habe ich noch. Bei dem Login verwende ich Session. Werden diese automatisch gelöscht/unbrauchbar wenn man einfach das Browserfenster schließt oder muss man auf Login gehen.
    Zuletzt geändert von gameco; 05.05.2006, 14:52.

  • #2
    Re: Erweitertes Login Script

    Ich habe mir das so vorgestellt, dass ich eine separate Spalte in meiner Tabelle habe, in der der Wert bei jedem Login um 1 erhöht wird.
    Ein weiteres Problem, dass ich noch habe ist, dass ich einen Schutz einbauen möchte, der es verhindert, dass jemand Ewigkeiten eingeloggt bleibt. Ähnlich wie z.B. bei einer Bank, wo man nach 15 Minuten Inaktivität ausgeloggt wird.e
    1.
    PHP-Code:
    UPDATE table SET login_count=login_count+
    2. Um zu prüfen wie lange es her ist das sich jemand eingelogt hatte musst du nur bei jedem login den Zeipunkt festhalten und anderswo den aktuellen zeitpunkt aufrufen und diesen mit dem loginzeitpunkt abgleichen, eine einfache abfrage mit <= löscht dann die jeweilige Session in der Datenbank (zb. bei online user) und initiiert beim user dann ein session_unset & session_destroy.
    Zuletzt geändert von boris-schneider; 05.05.2006, 15:10.

    Kommentar


    • #3
      Hallo boris-schneider,
      Vielen Dank für deine schnelle Antwort.
      Eine Frage hätte ich noch zu 1.
      Kann ich das dann beim Login einfach über If - else abfragen?

      Bei 2. habe ich ehrlich gesagt keine Ahnung, was du meinst.
      Es wäre nett, wenn du mir das noch einmal erklären könntest.

      Ich bin wie gesagt noch am lernen und verfüge leider noch nicht über weit reichendes Wissen.

      Gruß
      gameco

      Kommentar


      • #4
        Original geschrieben von gameco
        Ich bin wie gesagt noch am lernen und verfüge leider noch nicht über weit reichendes Wissen.
        Ich auch nicht

        Du kannst das klaro direkt beim login abfragen, so wie du ja eh das Passwort via Username aus der Datenbank holst, holst du gleich auch noch den count wert mit raus und gleichst diesen ab, am besten, "bevor" du den passwort vergleich machst!

        zu 2 nochmal: Nachdem der User sich erfolgreich eingeloggt hat, machst du direkt ein UPDATE um den Zeitpunkt fest zu halten wann der login statt gefunden hat. Jetzt fügst du ein Script ein "am besten in ein globales Script das bei jedem Script aufrufe der seite mit- aufgerufen wird und bringst dort am besten eine selbstgeschriebende funktion unter die den momentanen Zeitpunkt mit dem login zeitpunkt vergleicht und bei überschreitung die Session des Users zerstört.

        Ist besser als die Session zu begrenzen oder sich auf cookies zu verlassen!

        Kommentar


        • #5
          Hallo,
          Vielen Dank für die Hilfe / Anregungen.
          Ich werde dann mal versuchen das umzusetzen.
          Wenn noch Probleme sind, melde ich mich wieder.

          Gruß
          gameco

          Kommentar


          • #6
            Hallo,
            ich habe jetzt mal angefangen das Script zu erstellen.
            Dabei bin ich aber auf ein paar Probleme gestoßen.

            Wenn ich nur die ganz normale Passwort Abfrage mit einem anschließenden "print()" Befehl habe funktioniert alles bestens.
            Allerdings sobald ich über
            Code:
            header("Location: [url]http://www.irgendwas.com/[/url]");
            weiterleiten möchte kommt follgende Fehlermeldung:
            PHP-Code:
            WarningCannot modify header information headers already sent by (output started at 
            /www/htdocs/v133215/www.marbella-pc.com/login.php:8in /www/htdocs/v133215/www.marbella-pc.com/login.php on line 21 
            Ein weiteres Problem, dass ich habe ist die Sache mit der Zugriffsbeschränklung. Dort wird mir dann folgendes angezeigt:
            PHP-Code:
            Parse errorsyntax errorunexpected $end in /www/htdocs/v133215/www.marbella-pc.com/login.php on line 37 
            Was ich dar gar nicht verstehe, ist das in Zeile 37 lediglich das </html> steht.

            Hier noch einmal mein ganzer Code:
            PHP-Code:
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
            Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
            >
            <
            html xmlns="http://www.w3.org/1999/xhtml">
            <
            head>
            <
            meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            <
            title>Login</title>
            </
            head>
            <
            body>
            <
            script language="php">
            $username=$_POST['username'];
            $password=$_POST['password'];
            $db=mysql_connect("localhost","xxx","xxx");
            mysql_select_db("database");
            $db_request="Select * FROM user WHERE username LIKE '";
            $db_request.=$username;
            $db_request.="'";
            $result=mysql_query($db_request);
            $found=mysql_num_rows($result);
            if(
            $found==1) {
                
            $line=mysql_fetch_row($result);
                if(
            $line[4]==0) {
                    print(
            "You reach your limit of access. Please contact us to get more.");
                        if(
            $password=$line[2]) {
                            
            $update="UPDATE user SET access=access-1 WHERE username LIKE '$username'";
                            
            $send=mysql_query($update);
                            print(
            "OK");    
                        }
                else {
                    print(
            "Your Password is wrong, please click <a href='index.php'>here</a> to try again");
                    }
                    }
            else {
                print(
            "Your Username is wrong, please click <a href='index.php'>here</a> to try again");
                }
            mysql_close($db);
            </
            script>
            </
            body>
            </
            html
            Ich würde mich freuen, wenn mir jemand weiterhelfen würde.
            Hab echt keine Ahnung mehr, woran es liegen kann.

            Gruß
            gameco

            Kommentar


            • #7
              Original geschrieben von gameco
              Allerdings sobald ich über [...] weiterleiten möchte kommt follgende Fehlermeldung:
              Warning: Cannot modify header information - headers already sent
              Schau dir bitte den verflixten Sticky Thread hier im Forum dazu an - das blöde Thema wurde schon unzählige Male diskutiert, und das Manual erklärt dir auch ganz ausführlich, was du bei Benutzung von header() nicht machen darfst ...!

              Ein weiteres Problem, dass ich habe ist die Sache mit der Zugriffsbeschränklung. Dort wird mir dann folgendes angezeigt:
              Parse error: syntax error, unexpected $end [...]
              unexpected $end deutet fast immer darauf hin, dass du irgendwo vorher vergessen hast, einen mit { eröffneten Anweisungsblock auch mit einer } wieder zu schließen.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Hallo wahsaga,
                sorry, habe in dem Fall nicht an die Suche gedacht.
                Problem ist jetzt aber klar.

                Gibt es eine andere Möglichkeit einer Weiterleitung (außer JavaScript)?

                und eine weiteres Problem habe ich noch.
                Ich habe eigentlich jetzt alles nach meinen Wünschen fertig.
                Das einzige, was nicht geht, ist das meine Datenbank aktualisiert wird (verbleibene Zugriffe und login-Zeit).

                Es wird keine Fehlermeldung ausgegeben und ich kann den geschützten Bereich auch erreichen.

                Hier einmal mein ganzer Code aus der Login-Datei, da ich nicht weiß, wo genau der Fehler liegt (bei dem SQl-Update oder doch wo anders)

                PHP-Code:
                <script language="php">session_start();</script>
                <!
                DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <
                html xmlns="http://www.w3.org/1999/xhtml">
                <
                head>
                <
                meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                <
                title>Login</title>
                </
                head>
                <
                body>
                <
                script language="php">
                $username=$_POST['username'];
                $password=$_POST['password'];
                require (
                'connect.inc');
                $login_time=time();
                $db mysql_connect($dbHost$dbUser$dbPass) or die("Verbindung zum Server nicht hergestellt!<br>");
                mysql_select_db("v133215");
                $db_request="Select * FROM user WHERE username LIKE '";
                $db_request.=$username;
                $db_request.="'";
                $result=mysql_query($db_request);
                $found=mysql_num_rows($result);
                if(
                $found==1) {
                    
                $line=mysql_fetch_row($result);
                    if(
                $line[4]<=0) {
                        print(
                "You reach your limit of access. Please contact us to get more.");
                        die();            }
                            if(
                $password==$line[2]) {
                                
                session_register('username');
                                
                $update="UPDATE user SET access=access-1, login_time='$login_time' WHERE username LIKE '$username'";
                                
                $send=mysql_query($update_access);
                                print(
                "Click <a href='save_site.php>here</a>");    
                            }
                    else {
                        print(
                "Your Password is wrong, please click <a href='index.php'>here</a> to try again");
                        }
                        }
                else {
                    print(
                "Your Username was wrong, please click <a href='index.php'>here</a> to try again");
                    }
                mysql_close($db);
                </
                script>
                </
                body>
                </
                html
                Vielen Dank für die Hilfe

                Gruß
                gameco


                PS: Es ist so gedacht, dass ich in der Admin-Oberfläche die max. Anmeldungen angegeben werden und der Wert bei jedem Login -1 ist. Und bei der Zeit wird beim Login einmal die Zeit in die DB eingetragen. Jede weitere Seite 3600 (1Std.) zu der Zeit und vergleicht sie dann mit der Aktuellen.

                Kommentar


                • #9
                  echo $update;

                  Dann siehst du was der immer zur Datenbank sendet und siehst ob der Code richtig ist.


                  $line[4] wäre besser wenn du den Feldnamen nutzt.
                  Der Übersicht halber.


                  Für deine Last_Action musst du immer die Zeit ändern auf jeder Seite au der der user ist oder wann immer er eine Action macht.
                  Ist diese letzt action länger als 1 Std her lösche die Session

                  Kommentar


                  • #10
                    Hallo brusau,
                    hab den Fehler gefunden.
                    Das Problem war, dass ich die Variable $update erstellt habe, dann aber via mysql_query($update_access) senden wollte.
                    Hatte es einfach vergessen zu ändern, als ich die Zeit und die Zugriffe in eine Variable gepackt hatte.
                    Das fetch_row lasse ich so, da ich eh nur 5 Spalten habe und es somit übersichtlich genug für mich ist.
                    Aber Danke für den Tip.

                    Wie meinst du dass mit "Session löschen"?

                    Ich habe das bis jetzt so gelöst:
                    PHP-Code:
                    $login_time=$line[3];
                    $time=time();
                    $time+=3600;
                    if(
                    $login_time>$time) {
                        print(
                    "Your Session is closed, please click <a href='index.php'>here</a> to login.");
                        die(); } 
                    Gibt es da evtl. eine bessere Lösung?

                    Gruß
                    gameco

                    Kommentar

                    Lädt...
                    X