Ankündigung

Einklappen
Keine Ankündigung bisher.

login mit begrenzten zeitlimit

Einklappen

Neue Werbung 2019

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

  • login mit begrenzten zeitlimit

    hallo,

    also ich habe zur zeit schon ein einfaches login script laufen. nun wollte ich es erweitern, so dass die zugangsdaten nur eine bestimmte zeit gültig sind.

    Nutzung:
    User (Freunde/Bekannte) fragt mich, ob er ein Kennwort (genannt von mir session.key) bekommt. Ich erstelle ihm, per script, ein neuen session.key in der Datenbank. Bestehend aus ID, Kennwort, Zeitstempel (mit NOW()). Ich schicke dem User den session.key. Beim einloggen checkt das Loginscript, ob der session.key in der Tabelle vorhanden ist (es soll keine User geben. Alles geht nur über diesen session.key) und ob der key noch gültig ist.

    jetzt die frage, wie mach ich die abfrage fürs login script. bisher habe ich nur, dass die ersten 5 ids/session.keys rein dürfen (unabhängig von der gültigkeit):

    PHP-Code:

    $sql 
    "SELECT ".  
        
    "Id, Kennwort, Zeit ".  
      
    "FROM ".  
        
    "benutzerdaten ".  
      
    "WHERE ".  
        
    "Id <= 5 AND ".  
        
    "(Kennwort = '".md5 ($_REQUEST["pwd"])."')"
    Jetzt brauch ich die ganze abfrage so, dass die ersten 5 ids/session.keys ohne begrenzte gültigkeit rein dürfen und alle ids ab 6 nur mit einer begrenzung von 12h gültigkeit (seit der erstellung in der datenbank, siehe Spalte Zeit) einlass haben.

    Hoffe ihr versteht mein Wirrwarr

    Gruß Maxim


  • #2
    Mal nen Denkansatz:

    Code:
    (id <= 5 OR (id > 6 AND Zeit >= NOW() - 12 Stunden)) AND Kennwort = ...

    Kommentar


    • #3
      Zitat von Flor1an Beitrag anzeigen
      Mal nen Denkansatz:

      Code:
      (id <= 5 OR (id > 6 AND Zeit >= NOW() - 12 Stunden)) AND Kennwort = ...
      mehr ist das nicht? oh man, ich hatte halt in der schule zu wenig sql unterricht. Wusste nicht, dass man das alles so schön verschachteln kann.
      Wie ist das mit dem
      Code:
      Zeit >= NOW() - 12 Stunden
      . Was heißt das übersetzt? Zeit ist größergleich Uhrzeit(jetzt) vor 12 h?

      Kommentar


      • #4
        Na du hast doch gemeint du Speicherst in der Spalte "Zeit" den Zeitpunkt wo du den Schlüssel generierst. Und der soll eben 12h gültig sein. Bei der Abfrage überprüf ich das eben.

        Ihr habt in der Schule SQL gelernt?

        Kommentar


        • #5
          So, habe mal das ganze probiert, aber bekomme dann Fehlermeldung:

          Code:
          Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/htdocs/w005a1c9/login/check.php on line 20
          
          Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/w005a1c9/login/check.php:20) in /www/htdocs/w005a1c9/login/check.php on line 34
          Das habe ich für den Login-Check:

          PHP-Code:
          // Session starten 
          session_start (); 

          // Datenbankverbindung aufbauen  
          $connectionid mysql_connect ("localhost""XXX""XXX");  
          if (!
          mysql_select_db ("XXX"$connectionid))  
          {  
            die (
          "Keine Verbindung zur Datenbank");  
          }  

          $sql "SELECT ".  
              
          "Id, Kennwort, Zeit ".  
            
          "FROM ".  
              
          "benutzerdaten ".  
            
          "WHERE ".  
              
          "(Id <= 5 OR (Id > 6 AND Zeit >= NOW() - 12 Stunden)) AND (Kennwort = '".md5 ($_REQUEST["pwd"])."')";  
          $result mysql_query ($sql);  

          if (
          mysql_num_rows ($result) > 0)  
          {  
            
          // Benutzerdaten in ein Array auslesen.  
            
          $data mysql_fetch_array ($result);  

            
          // Sessionvariablen erstellen und registrieren  
            
          $_SESSION["user_id"] = $data["Id"];  
            
          $_SESSION["user_nickname"] = $data["Nickname"];  
            
          $_SESSION["user_name"] = $data["Name"];

            
          header ("Location: http://XXX/friends");  
          }  
          else  
          {  
            
          header ("Location: http://XXX/login/fail.php");  


          SQL hatte ich in der Schule, weil ich einen IT Beruf gelernt habe. Fand ich sehr interessant. Aber leider wurd ich daraus kein PHP/SQL Profi. Was ich gerne wäre

          Kommentar


          • #6
            In SQL kannst du nicht schreiben "- 12 Stunden". Das war doch nur als Denkanstoß gemeint! Du musst schon die entsprechenden Funktionen raus suchen die so etwas liefern.

            Kommentar


            • #7
              Zitat von Flor1an Beitrag anzeigen
              Code:
              Zeit >= NOW() - 12 Stunden
              das ist meine lösung:

              PHP-Code:
              (Zeit BETWEEN DATE_ADDNOW(), INTERVAL -12 HOUR) AND NOW()) 
              war gar nicht so einfach

              Kommentar


              • #8
                Oder auch:

                Code:
                Zeit >= DATE_SUB( NOW(), INTERVAL 12 HOUR)

                Kommentar


                • #9
                  das noch besser! Danke.

                  Sag mal, ich kann doch auch
                  Code:
                  id > 6
                  weglassen oder? Weil entweder greift er auf die unteren 5 id oder schaut aufs datum, oder?

                  Kommentar


                  • #10
                    Ja.

                    Kommentar

                    Lädt...
                    X