nach erstem Login (mit Passwort) gehts auch ohne PW
Shawn
- php
0 Peter0 Shawn
1 Sven Rautenberg0 Shawn0 Sven Rautenberg0 Shawn
Hallo alle Wissenden,
ich stehe vor einem Rätsel und finde keine Lösung bzw. Erklärung dafür.
Ich habe in PHP ein Zugriffslogin programmiert und das funktioniert wunderbar. Es greift auf eine bestehende Passworttabelle zu und vergleicht und läßt nur bei richtigem Passwort die Mitglieder zu.
PROBLEM: wenn man sich einmal richtig eingeloggt hatte, dann geht es die nächsten Male auch ohne PW. Nur, wenn man ein falsches eingibt kommt mit Verzögerung die Meldung, dass das PW falsch war.
Ich habe jetzt eine Zusatzabfrage drin, dass ein leeres PW-Feld nicht zulässig ist. Nun geht es, aber schön find ich die Lösung nicht. Und ich weiß immer noch nicht, warum da plötzlich das PW nicht eingegeben werden muss.
hier mal der aktuelle Code:
if ((isset($_POST['Anmelden'])) && ($_POST["passwort"]!="")){
if (!$_POST['teilnehmer']==""){
//Verbindung zur Novell DB
$db_obj = new CNovellCheck();
//Prüfen ob Passwort zur Kennung stimmt
if ($db_obj->CheckUser($_POST["teilnehmer"],$_POST["passwort"]))
$_SESSION['userID']=$_POST["teilnehmer"];
else {
?>
<SCRIPT type="text/javascript">
//Warnmeldung generieren
alert(unescape("falsches Passwort"));
</SCRIPT>
<?php
}
}
}
CNovellCheck() verbindet mit der DB
CheckUser() liefert true wenn PW und username passen
Danke schonmal an alle die helfen können bzw. mitgrübeln!
MfG
Shawn
hi,
ich habe mich zwar jetzt nicht intensiver mit deinem script auseinander gesetzt, ich denke aber das liegt an dem cookie mit der session, der beim login gesetzt wird.
gruß
Peter
Hallo Peter,
müsste dann aber nicht nach dem Ende der Session dies gelöscht werden? Oder kann ich beim Logout dieses Cookie irgendwie löschen?
Es nervt halt, dass jetzt bei PW-Falscheingabe, dann eine längere und merkliche Wartezeit bis zur fehlermeldung entsteht, die sonst nicht ist.
Mir gefällt wie erwähnt meine Lösung mit dem Ausschluss von "" nicht Hundertprozentig.
Gruß
Shawn
Moin!
hier mal der aktuelle Code:
Der ist erstens eklig eingerückt, zweitens auch inhaltlich nicht schön, und drittens nur ein Teil dessen, was relevant ist.
1. Wo startest du die Session?
2. Wie prüfst du, nachdem der Benutzer erfolgreich authentifiziert wurde, weitere Zugriffe.
3. Was passiert beim Logout oder Timeout?
Ansonsten als Kommentar:
if ((isset($_POST['Anmelden'])) && ($_POST["passwort"]!="")){
// Wenn du isset verwendest, dann doch bitte konsequent für alle Variablen, bitte.
if (!$_POST['teilnehmer']==""){
// Beim ersten IF hast du den Ungleich-Operator noch gekannt.
// Und isset fehlt hier auch.
//Verbindung zur Novell DB
$db_obj = new CNovellCheck();
//Prüfen ob Passwort zur Kennung stimmt
if ($db_obj->CheckUser($_POST["teilnehmer"],$_POST["passwort"]))
$_SESSION['userID']=$_POST["teilnehmer"];
// Geschweifte Klammern kann man weglassen bei nur einer Folgeanweisung, [link:http://forum.de.selfhtml.org/archiv/2007/1/t143344/#m930909@title=man sollte es aber nicht!]
else {
?>
<SCRIPT type="text/javascript">
//Warnmeldung generieren
alert(unescape("falsches Passwort"));
</SCRIPT>
<?php
// Inline-HTML-Code ist auch nicht wirklich schön.
}
}
}
- Sven Rautenberg
--
"Love your nation - respect the others."
Hallo!
Der ist erstens eklig eingerückt, zweitens auch inhaltlich nicht schön, und drittens nur ein Teil dessen, was relevant ist.
O.K. seh ich ein ;-)
- Wo startest du die Session?
Der allererste Befehl jeder Seite ist:
@session_start();
- Wie prüfst du, nachdem der Benutzer erfolgreich authentifiziert wurde, weitere Zugriffe.
wenn $_SESSION['userID']=$_POST["teilnehmer"]; gesetzt wurde, wird "Hallo Herr X angezeigt und nicht mehr der Login Bereich (if Abfrage ob $_SESSION['userID'] vorhanden ist.
- Was passiert beim Logout oder Timeout?
Timeout wird nicht betrachtet (vorerst).
Bei Logout Button Betätigung folgt:
lougout.php
<?php
// Session wieder erkennen
@session_start();
// aktuelle Session beenden
@session_destroy();
//Startseite neu laden
header("location: pj_mainpage.php");
exit;
?>
auf pj_mainpage.php findet alles andere statt und da ist dann ein neuer Login möglich, weil ja $_SESSION['userID'] leer ist.
Ansonsten als Kommentar:
if ((isset($_POST['Anmelden'])) && ($_POST["passwort"]!="")){
// Wenn du isset verwendest, dann doch bitte konsequent für alle Variablen, bitte.
if (!$_POST['teilnehmer']==""){
// Beim ersten IF hast du den Ungleich-Operator noch gekannt.
// Und isset fehlt hier auch.
//Verbindung zur Novell DB
$db_obj = new CNovellCheck();
//Prüfen ob Passwort zur Kennung stimmt
if ($db_obj->CheckUser($_POST["teilnehmer"],$_POST["passwort"]))
$_SESSION['userID']=$_POST["teilnehmer"];
// Geschweifte Klammern kann man weglassen bei nur einer Folgeanweisung, [link:http://forum.de.selfhtml.org/archiv/2007/1/t143344/#m930909@title=man sollte es aber nicht!]
else {
?>
<SCRIPT type="text/javascript">
//Warnmeldung generieren
alert(unescape("falsches Passwort"));
</SCRIPT>
<?php
// Inline-HTML-Code ist auch nicht wirklich schön.
}
}
}
Danke für die Tips!!! Ich programmier erst seit 3 Wochen PHP und bin dabei noch im Zeitdruck.
Gruß
Shawn
Moin!
Bei Logout Button Betätigung folgt:
lougout.php<?php
// Session wieder erkennen
@session_start();
// aktuelle Session beenden
@session_destroy();
//Startseite neu laden
header("location: pj_mainpage.php");
exit;
?>auf pj_mainpage.php findet alles andere statt und da ist dann ein neuer Login möglich, weil ja $_SESSION['userID'] leer ist.
Das ist nicht, was das Handbuch sagt!
Zunächst mal als Praxisaussage: session_destroy ist ein höchst selten anzutreffender Befehl, man benötigt ihn eigentlich nie.
Und dann solltest du dir die Handbuchseite zu session_destroy aufmerksam durchlesen: http://de3.php.net/manual/de/function.session-destroy.php, insbesondere den Beispielcode.
Andererseits: Wenn du die Session nicht als Zustandindikator betrachtest, brauchst du sie auch nicht zu zerstören, sondern mußt die Daten in $_SESSION nur passend verwalten je nach Zustand der Session. Jeder Benutzer, der die Seite besucht, kriegt eine Session-ID und startet seine eigene Session. Wenn er sich dann einloggt, wird diese Tatsache im Session-Array gespeichert. Wenn er sich wieder ausloggt, wird das ebenfalls im Session-Array gemerkt (z.B. durch Löschen des Benutzernamens, wenn die Existenz dieses Namens im Array der Beweis ist, dass Username und Passwort korrekt waren und die Speicherung dort nur erfolgt, wenn die Prüfung erfolgreich war).
- Sven Rautenberg
Hallo,
ich denke, deine letzten Anmerkungen sind die, wo ich mal aufsetzen werde.
Ich danke auf jeden Fall für die vielen Infos!!!
Gruß
Shawn