Angemeldet bleiben
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bedingung
benutzer
betreten
bleiben
browser
code
datei
eintrag
erneute falsche anmelden
ersten versuch
erzeugen
header
konto
login
problem
sekunde
session
url
zehn
zeile
-
allo, ich hatte neulich nach einer Cookie-Lösung gefragt und mir wurde mit ob_start geantwortet. Das funktioniert auch bei meinem ersten Versuch, nun möchte ich aber ein Loginsystem erstellen, Username "benutzer" und Passwort "password". Außerdem soll es ein angemeldet bleiben - Kästchen geben, dass einen Cookie für 4000 Sekunden erzeugen soll, mit dem man angemeldet bleibt. Dieser soll den SESSION-Eintrag "login" per if automatisch auf "yes" setzen. Wenn das Kästchen nicht ausgewählt ist, soll ein entsprechender anderer Cookiewert hinzugefügt werden. In der Formulardatei kommt auch vor, dass wenn man sich ein zweites Mal anmeldet und "angemeldet bleiben" aktiviert ist, eine Meldung erscheint, dass man schon angemeldet ist. In der LOGIN-Datei wird man per JS-Alert benachrichtigt, wenn das Passwort stimmt, bzw. wenn es nicht stimmt.
Auf der Zielseite ist eine Benachrichtigung über den Wert des Cookies und eine Textzeile.
Hier ist der Formularcode in der HTML-Datei:
<form method="post" action="/konto/login"> <input name="username" type="text" value="Benutzer" /><br /> <input name="password" type="password" value="password" /><br /> <object> <input name="bleiben" type="checkbox" value="yes" /> Angemeldet bleiben<br /> <input type="submit" value="anmelden" /> <?php if($_COOKIE["bleiben"] == "yes"){ echo("Du bist schon angemeldet!"); } ?> </form>
JETZT DIE LOGIN.PHP:
<?php ob_start(); if($_POST["username"] == "benutzer" && $_POST["password"] == "passwort"){ session_start(); $_SESSION["login"] = "yes"; echo ("<script>alert('Du bist eingeloggt');</script>"); echo ("<a href='/konto/myaccount'>Link zum Weiterkommen</a>"); } else{ session_start(); $_SESSION["login"] = "no"; echo ("<script>alert('Du bist nicht eingeloggt');</script>"); echo ("<a href='/konto'>Link zum Login</a>"); } if($_POST["bleiben"] == "yes" && $_POST["username"] == "benutzer" && $_POST["password"] == "passwort"){ setcookie("bleiben", "no", time()-4000); setcookie("bleiben", "yes", time()+4000); } else{ setcookie("bleiben", "yes", time()-4000); setcookie("bleiben", "no", time()+4000); }
DIE ZIELSEITE (MYACCOUNT.PHP):
<?php ob_start(); if ($_COOKIE["bleiben"] == "yes"){ session_start(); $_SESSION["login"] = "yes"; } $_COOK = $_COOKIE["bleiben"]; session_start(); if ($_SESSION["login"] == "no") { header("Location: /konto"); } echo ("Cookiewert: $_COOK"); ?> <html> <head> <title>MyAccount - SuperRadio</title> </head> <body> Das myAccunt Beispiel </body> </html>
DAS WAR'S!
Das Skript kann eigentlich alles, die DU BIST SCHON ANGEMELDET-Info funktioniert, auf der Zielseite wird auch der korrekte Wert des Cookies ausgegeben.
Sessions werden ja eigentlich beim schließen des Browsers beendet. Nun, aber bei mir ist das Problem, dass anscheinend die Session unendlich lange läuft. Denn, obwohl ich ANGEMELDET BLEIBEN nicht
ausgewählt habe, und den Tab und den Browser schließe, nach zehn Stunden muss ich mich NICHT neu anmelden, erst wenn ich durch das erneute (falsche) Anmelden wieder den SESSION-Eintrag auf "No" setze.
Da mein Skript sehr simpel und ohne Supersicherheit sein soll, finde ich dementsprechend auch keine Tipps auf Google, da die meisten ein Datenbanksystem benutzen.
Kann jemand mir helfen?
Link: https://prime.super-radio.de/konto.
Vielen Dank,
mehralsnurradio -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo mehralsnurradio,
das Problem müsste in der myaccount.php an dieser Stelle liegen:
if ($_SESSION["login"] == "no") { header("Location: /konto"); }
Wenn ein neuer Benutzer die Seite betritt, dann hat seine Session-Variable noch keinen Inhalt. Das bedeutet, dass das Feld "login" auch nicht "no" enthalten kann. Die Bedingung ist nicht erfüllt und du bekommst keine Weiterleitung.
Besser wäre sowas:
if (!isset($_SESSION["login"]) || $_SESSION["login"] != "yes") { header("Location: /konto"); exit; }
Ich hoffe, dass du dieses Skript wirklich vorerst nicht produktiv einsetzt, denn dazu müsstest du noch einiges zum Thema Absicherung dazulernen. -
Danke, ich habe meinen Fehler korrigiert aber es klappt immer noch nicht...
Beitrag zuletzt geändert: 25.7.2018 20:55:59 von mehralsnurradio -
Wenn ich jetzt auf deiner Seite angemeldet bin und den Browser schließe und neu öffne, bin ich wieder abgemeldet. Das funktioniert also schonmal.
Was noch nicht geht, ist die Funktion "Angemeldet bleiben".
Dazu solltest du die folgenden Zeilen noch einmal überarbeiten:setcookie("bleiben", "no", time()-4000); setcookie("bleiben", "yes", time()+4000);
Wenn du einem Cookie einen neuen Wert geben möchtest, ist es nicht notwendig, diesen vorher zu löschen. Die obere der beiden Zeilen kannst du dir also sparen. Setze einfach den neuen Wert mit neuem Ablaufdatum und die Sache ist gut.
Der gleiche Fall ist dann nochmal drei Zeilen weiter unten, da solltest du auch die Zeile zum Löschen des Cookies entfernen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage