PHP Login/ Angemeldet bleiben.

  • Schreibfehler sind fatal. Guckt dir den Namen des ersten Felds an.
  • lifetime sollte INT(11) sein.
...und in Zukunft bitte nicht das Forumlayout sprengen :roll:
 
Ok ich fasse mal zusammen:

Ich habe einmal autologinid erstellt mit einem primären schlüssel, damit dir zahl nur einmalig ist. Dann nochmal userid und Lifetime.

Doch was komtm jetzt in dei .php datei (da wo man anklickt das man dauerhaft eingeloggt sein will).
 
Ich habe einmal autologinid erstellt mit einem primären schlüssel, damit dir zahl nur einmalig ist.
Is keine Zahl, da kommt ein Hash rein. Aber sonst korrekt.
Dann nochmal userid und Lifetime.
Zusätzlich, um den User, der mit dem Hash eingeloggt wird, zu speichern und dem Keks eine serverseitige (auf Clientseite kann gefaked werden) Gültigkeit zu geben.
Doch was komtm jetzt in dei .php datei (da wo man anklickt das man dauerhaft eingeloggt sein will).
Im Prinzip sieht das dann so aus:
PHP:
/* Pseudocode für Anmelden */

// abgelaufene Hashes löschen
$db->queryf("DELETE FROM ... WHERE lifetime < UNIX_TIMESTAMP()");

// Autologin aktiviert ?
if($stay_logged_in)
{
  $lifetime = time() + 7*24*3600; // eine Woche z.B.
  $userid = ...; // vorher aus der Usertabelle mit Username/PW holen

  // Hash generieren und eintragen
  do {
    $hash = generate_hash();
    $db->queryf("INSERT IGNORE INTO ... ", $hash, $userid, $lifetime);
  } while(!$db->affected_rows());

  // Keks setzen
  setcookie("autologin", $hash, $lifetime, ...);
}
PHP:
/* Pseudocode für den Autologin */

// abgelaufene Hashes löschen (kann man einmal global machen oder besser Cron einsetzen)
$db->queryf("DELETE FROM ... WHERE lifetime < UNIX_TIMESTAMP()");

if(isset($_COOKIE['autologin']))
{
  // Hash lesen und validieren
  $row = $db->queryf_result("SELECT ... WHERE hash = '%s'", $_COOKIE['autologin']);
  // WICHTIG: sichere DB-Klasse benutzen, $_COOKIE[] ist gefährlich !

  // sicher is sicher: nochmal lifetime checken, hier evtl. IP-Sperre etc.
  if(($row['lifetime'] < time()) || ...)
    forget_it();

  // weitere Sicherheitschecks, z.B. ob User $row['userid'] schon eingeloggt ist
  // ...

  // User ist sauber, alles klar: einloggen
  login($row['userid']);
}
 
Ok das mit den Hash habe ich verstanden. Ist logisch jetzt für mich, auch das der hash gelöscht wird...

Nun meine letzte Frage: Wo kommt jetzt welcher Code hin?
 
Nun meine letzte Frage: Wo kommt jetzt welcher Code hin?
Der obere Code ist fürs Einloggen-Formular, d.h. wenn der User sich einloggt und das Häkchen "eingeloggt bleiben" gecheckt hat.

Der untere Code muss in den globalen Initialisierungsteil deines Scripts. Er sorgt dafür, dass immer wenn ein neuer Gast deine Webseite betritt, er nach einem Keks gefilzt wird, dieser überprüft und falls alles ok is, der Gast automatisch zum eingeloggten User wird.
 
Danke theHAcker

Zum 2.
Also könnte ich theoretisch eine z.b. check.php anlegen mit dem 2ten Code, und den dann halt auf jeder Seite per include einfügen. Das muss doch auf jede Seite, wie eine Session? Oder habe ich da was falsch verstanden?

Zum 1.
Also erstelle ich beim einloggformular ein radiobutton, bei dem man ein Hacken setzen kann. Aber dann muss der radiobutton ja einen namen oder so haben?
Z.b.

Code:
<form id="form1" name="form1" method="post" action="">
  <label>
  <input type="radio" name="radio" id="radio" value="radio" />
  </label>
</form>
das ist der Code für ein radiobutton, aber was für einen namen oder type oder sonstwas muss der haben? Oder muss der Code drumrumgeschlossen sein?

LG
 
Zum 2.
Also könnte ich theoretisch eine z.b. check.php anlegen mit dem 2ten Code, und den dann halt auf jeder Seite per include einfügen. Das muss doch auf jede Seite, wie eine Session? Oder habe ich da was falsch verstanden?

Genau so! Denn ein User mit Autologin aktiv will sicher auch mal das Surfen mit einer (zB. gebookmarkten) Unterseite anfangen. Somit muss dein Code auf jeder Seite vorhanden sein zB. durch include().

Zum 1.
Also erstelle ich beim einloggformular ein radiobutton, bei dem man ein Hacken setzen kann. Aber dann muss der radiobutton ja einen namen oder so haben?
Z.b.

Code:
<form id="form1" name="form1" method="post" action="">
  <label>
  <input type="radio" name="radio" id="radio" value="radio" />
  </label>
</form>
das ist der Code für ein radiobutton, aber was für einen namen oder type oder sonstwas muss der haben? Oder muss der Code drumrumgeschlossen sein?

Du brauchst eine Checkbox. Ein Radiobutton ist ein Eingabefeld zum Selektieren einer von vielen Möglichkeiten.

Bsp:
<input type="checkbox" name="do_autologin" value="yes">

Wenn du jetzt im PHP-Script, welches das abgeschickte Formular bearbeitet, einfach guckst ob die Variable $_POST['do_autologin'] den Wert 'yes' hat, dann weißt du das der User die Autologin Checkbox angehackt hat.
theHacker hat diese Variable in seinem Pseudo-Code $stay_logged_in genannt.
 
Eine Frage hätte ich da noch. Soll man besser DB-Session/Cookie gleiche Lifetime verpassen oder Cookie z.B. Standard auf 2038 und wenn DB-Session um ist Cookie Lifetime in Vergangenheit setzen.
 
Eine Frage hätte ich da noch. Soll man besser DB-Session/Cookie gleiche Lifetime verpassen oder Cookie z.B. Standard auf 2038 und wenn DB-Session um ist Cookie Lifetime in Vergangenheit setzen.

Funktionieren würde beides, aber es ist sinnfrei den Cookie bis ultimo zu behalten wenn die Session eh abgelaufen ist, von daher gleiche Lifetimes.
 
hallo

hab heute mal versucht den Code von thehacker einzubauen
aber bei mir kommen leider nur Fehlermeldungen

jetzt wollte ich mal fragen ob das script überhaupt noch mit der aktuellen php Version funktioniert


Fatal error: Call to undefined function generate_hash() in /var/www/web144/html/config.php on line 92
 
hab heute mal versucht den Code von thehacker einzubauen
aber bei mir kommen leider nur Fehlermeldungen

jetzt wollte ich mal fragen ob das script überhaupt noch mit der aktuellen php Version funktioniert
Das "Script" funktioniert mit keiner PHP-Version, da das nur Pseudocode is. Hirneinschalten muss man schon selber; steht doch sogar großmächtig drüber :doh:
 
Das "Script" funktioniert mit keiner PHP-Version, da das nur Pseudocode is. Hirneinschalten muss man schon selber; steht doch sogar großmächtig drüber :doh:

Code-Kommentare werden nicht gelesen, die sagen ja nur aus, was der Programmierer sich beim Schreiben dachte, das interessiert mich ja nicht ich wills ja nur kopieren und es soll funktionieren :biggrin:
 
sorry

suche schon seit wochen eine möglichkeit mein loginscript mit einem autologin zu erweitern
heute hab ich dann diesen beitrag über google gefunden und gedacht ich bau den code mal bei mir zum testen ein :-?

naja egal
ich geh mal weiter googeln ...