PHP, Datenbank Login über mehrere Seiten merken?

 - (Computer, Technik, Technologie)  - (Computer, Technik, Technologie)

3 Antworten

Bitte nicht in der Session das Passwort sichern. Das folgende Prinzip ist sicherer:

Benutzer füllt Login Formular aus, und schickt es an dein PHP.

Benutzername + Passwort mit den Daten der Datenbank vergleichen:

Benutzernamen und von mir aus ein login=1 in die Session schreiben.

Auf beliebige Seite weiterleiten.

Auf jeder Seite die nun "unter Passwortschutz" stehen soll, fragst du als erstes ab, ob in der Session login = 1 ist oder ob _SESSION['benutzername'] existiert. Wenn nein, leitest du wieder zum Loginformular.

---

Zu deiner Frage: ist jede Seite eine eigene PHP Datei?

Möglicherweise wird die SessionID nicht mitgeliefert, so daß die zweite Seite die Session nicht erkennt? mache mal auf der zweiten seite ein var_dump($_SESSION) und schau mal ob da die gewünschten Inhalte stehen, nachdem du dich eingeloggt hast.

also ich hab das mit var_dump probiert.. er liefert mir dass ich als "ich" angemeldet bin, jedoch wenn ich die Seite einfach so aufmache, also in der url eingebe - die Seite auf die ich komme wenn ich mich angemeldet habe, jetzt jedoch ohne Anmeldung komme ich auf die diese Seite, ohne dass ich eigentlich angemeldet bin. also var_dump schreibt mir das auch, also eher nichts eigentlich, falls du weißt was ich meine

0
@PhilomenaPierce

Das verstehe ich jetzt ehrlich gesagt nicht... Aber ich habe noch was in deinem Code gefunden: du machst zweimal $stmt->execute(), einmal als Kommando, und einmal innerhalb einer if-Abfrage. Mache das lieber so: $result = $stmt->execute() und dann if($result) ...

0

Ich habe die Antwort von Stedward nicht ganz verstanden, genausowenig verstehe ich dein Vorgehen -- speicherst du nun die Einlog-Meldung des Benutzers ab oder nicht?

PHP merkt sich da nichts, kann sich die Daten nur aus einer Datenbank holen, alternativ könntest du Cookies benutzten (eingeloggt, der User "bekommt" ein entsprechendes Cookie auf seinen PC) -- du solltest dir das Prinzip von "Webseiten" bzw. Aufrufen von Seiten mal klar machen.

Jeder Aufruf ist eine ganz neue Aktion ohne Vergangenheit!!! Was im vorherigen Aufruf passiert, kann nur über eine Datenbank oder eben Cookies nachvollzogen werden.

ich habe eine Datenbank schon wo accounts angelegt sind mit Benutzername Passwort und noch vielem mehr.

Insgesamt hat die Datenbank 10 Tabellen.. darauf werde ich jetzt nicht eingehen weil diese nicht mein Problem ist.

Sondern dass sich der Account nicht merken kann dass er eine Sportart ausgewählt hat und diese in der Datenbank bei diesem Account speichert

0
@PhilomenaPierce

Dann liest du die Sportart eben irgendwie nicht mehr aus der Datenbank aus -- aber vorher musst du eben erst den entsprechenden Account aus der Datenbank auslesen -- PHP oder HTML merken sich nichts -- jeder Aufruf ist oihne Vorgeschichte

0

Es gibt eine Grundregel. Man speichert nie sensible Benutzerdaten wie die E-Mail Adresse und Passwort weder in der Session, noch als Cookie oder im HTML5 Storage.

Du solltest folgendermaßen vorgehen:

Beim Login erzeugst du einen Token bzw. eine einzigartige ID, die du in die Datenbank des jeweiligen Nutzer speicherst und als Session oder Cookie setzt.

Wenn nun der Benutzer eine geschützte Seite aufruft, überprüfst du zuerst, ob die jeweilige Session oder Cookie gesetzt worden ist. Falls ja, gleichst du im nächsten Schritt die ID mit der in der Datenbank ab.

Hier ein Beispiel:

if (isset($_SESSION['authToken'])) {
  $token = $_SESSION['authToken'];

  $q = "SELECT `token` FROM `users` WHERE `token` = :token";
  $stmt = $db->prepare($q);
  $stmt->bindParam(':token',$token, PDO::PARAM_STR);
  $res = $stmt->fetch();

  if ($res) {
    echo "User ist authentifiziert";
  } else {
    echo "Token ist invalide";
  }
} else {
 echo "User ist nicht angemeldet";
}

Zudem setzt du auch nur die Session, falls die Session noch nicht gesetzt worden ist, sonst wird diese überschrieben.

Soweit alles in Ordnung - für eine einfache Anwendung auf einem Server aber vermutlich bissle overkill. Da kann er direkt den Nutzernamen/ID in der Session speichern.

0
@thomaszZz, Software Engineer bei gutefrage

Kommt ganz drauf an wie man das ganze sieht. Vermutlich ist es ein Overkill, aber wenn es um Sicherheit geht halte ich temporär generierte Tokens für Sinnvoll, da diese nicht permanent existieren.

0

Wie am besten den Login checken?

Hi, Ich wollte fragen, wie man am besten checken sollte, ob jemand eingeloggt ist. Im Klartext heißt das, dass wenn man sich einloggt, dass man ja auch auf anderen Seiten eingeloggt sein soll. Ich habe es bis jetzt immer so realisiert: Wenn man einloggt wird wenn alles korrekt ist, ein Token generiert. Der wird dann in eine PHP Session gesetzt($_SESSION['token'];) Über diesen Token wird dann abgefragt, ob er in der DB existiert etc. Ist das gut so? Oder sollte man es anders machen?

...zur Frage

Wie teste ich die Sicherheit meines Login-Scripts?

Hallo!

Kurze Erläuterung zu meiner Frage: Ich möchte versuchen, mein eigenes Login-Script auf Schwachstellen zu prüfen. Wie kann ich das ohne mich mit Viren zuzumüllen und ohne illegale Methoden anstellen?

LG

PS: Das Script basiert auf php und mysql.

...zur Frage

Steam passwort vergessen - zurücksetzten?

Hoffe mir kann hier jemand weiterhelfen :D Seit ein paar Tagen muss ich mich bei steam zum login das passwort eingeben (hatte eigentlich ausgewählt dass das passwort gespeichert werden soll, das hat auch eine zeit lang funktioniert) naja, das Problem ist ich habe das Passwort vergessen. Auf der Steam -Support Seite steht ich soll auf "Account wiederherstellen" . Das sehe ich aber bei meinem Login-Fenster nicht. Danke schonmal :)

...zur Frage

Wie kann ich mein C# Form Programm mit einer Datenbank oder einem Jimdo Webspace verbinden?

Hallo. Ich habe bis jetzt die Logins in meinem Login System innerhalb der Anwendung gespeichert. Dies ist aber sehr unsicher und belastend wenn du zB. ein Login eintragen willst musst du eine neue Version raus bringen. Ich Möchte nun Login Daten ändern / hinzufügen können über eine Datenbank auf meinem Server oder einem Jimdo Webspace.

Bitte um Hilfe..

LG

Danke im Vorraus!

...zur Frage

Was möchtest Du wissen?