• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Webpage mit Login

arunhha

Neues Mitglied
Hallo!

Ich möchte eine Website mit Login erstellen.Der Code für das Login wurde mit "Maguma Studio" erstellt.
Jetzt ist es so: Der Login erfolgt mit und ohne Passwort und Benutzername.
Die Weiterleitung auf die eigentliche Seite funzt.
Erstellt wurde eine check.php und eine Textdatei mit berechtigten User (???.txt)
Wo liegt der Fehler im Login???

PHP:
<form action="check.php" method="post">
<table width="200" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Name:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="pass"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="login" value="Login">
</td>
</tr>
</table>
</form>

<?php
session_start();

$trennzeichen = "#";

if($login)
{
$name = $_POST['xxx'];
$pass = $_POST['yyy'];

$pass = md5($pass);


if(file_exists("user/".$xxx.".txt"))
{
$file = file("user/".$xxx.".txt");
$true = TRUE;
}

else
{
echo "Benutzername nicht gefunden";
$true = FALSE;
}

if($true)
{
$arr = explode($trennzeichen, $file['0']);
$a_name = $arr['0'];
$a_pass = $arr['1'];

if($a_name == $name && $a_pass == $pass)
{
$logedin = TRUE;
session_register("logedin");
echo "Login erfolgreich!<br>Bitte klicken Sie <a href=\"index.php\">hier</a> um zur Startseite zu gelangen.";
}
else
{
echo "Die Daten waren falsch.";
}
}
}
?>

<?php
session_start();
if(session_is_registered("logedin") && $_SESSION['logedin'])
{
echo "Sie sind eingeloggt.<br><a href=\"logout.php\">Ausloggen</a>";
}
else
{
echo "Sie sind nicht eingeloggt.";
}
?>
<?php
session_start();
session_unset ("logedin");
session_destroy();
echo "Erfolgreich ausgeloggt!<br><a href=\"index.php\">zur Startseite</a>";
?>

Im Ordner "User"
befindet sich die xxx.txt Datei

Inhalt der txt Datei


name=xxx
Password=yyy


Wo liegt oder liegen hier der/die Fehler?
Wie erzeuge ich einen Hash mit "Maguma Studio"?
Wie muß die Usertext Datei geschrieben werden(Sonderzeichen)
 
Zuletzt bearbeitet von einem Moderator:
Ich denke,das mein Ansatz richtig ist.Leider funktioniert das Ganze so nicht.Also Was muß ich wie verändern,das es funtioniert.
 
Lerne debugging und benutze error_reporting.
Ohne Fehlerbeschreibung können wir dir kaum weiterhelfen.
 
PHP:
if($login)
{
$name = $_POST['xxx'];
$pass = $_POST['yyy'];

$pass = md5($pass);


if(file_exists("user/".$xxx.".txt"))

Schon zu Beginn des Scripts ergibt das hier extrem wenig Sinn. Hast du da vergessen, "xxx", "yyy" durch "name", "pass" zu ersetzen? Auch die Geschichte mit dem Hash als Trennzeichen passt vorne und hinten nicht. Zudem solltest du numerische Array-Indizes ($arr[0]) nicht in Anführungszeichen setzen.

Hast du außerdem den Quellcode in deinem Ausgangsposting aus verschiedenen Dateien zusammenkopiert?

Es ist insgesamt nicht gerade sicher, die Username/Passwort-Paare in einfachen Textdateien unterhalb des Document Roots zu speichern.
 
Ich denke das eine Hash Verschlüsselung effektiv ist.Welche Möglichkeiten gibts noch?
Kopiert habe ich nix.Mache mir eigene Gedanken.
xxx und yyy sind durch name und pass erstzt.

in meinem Beispiel funktioniert der Login auch ohne Benutzername und Passwort.
WO muß ich was ändern?
 
Dreimal session_start und gegen Scriptende immer wieder ausloggen ergibt keinen Sinn. Deshalb frage ich, ob du da mehrere Dateien zusammenkopiert hast.

Das Script könnte zum Beispiel so aussehen:

PHP:
<?php

$trennzeichen = '#';

session_start();

$action   = (isset($_POST['action'])) ? $_POST['action'] : '';
$errors   = array();
$messages = array();

if ($action == 'login') {
    $_POST['name'] = (isset($_POST['name'])) ? trim($_POST['name']) : '';
    $_POST['pass'] = (isset($_POST['pass'])) ? trim($_POST['pass']) : '';

    if ($_POST['name'] == '' || $_POST['pass'] == '') {
        $errors[] = 'Nicht alle Felder ausgefüllt';
    }
    
    $file = array();

    if (count($errors) == 0) {
        if (file_exists('user/' . $_POST['name'] . '.txt')) {
            $file = file('user/' . $_POST['name'] . '.txt');
        } else {
            $errors[] = 'Benutzername nicht gefunden';
        }
    }

    if (count($errors) == 0) {
        $arr = explode($trennzeichen, $file[0]);

        if ($arr[0] == $_POST['name'] && $arr[1] == md5($_POST['pass'])) {
            $_SESSION['user'] = $_POST['name'];
            $messages[] = 'Login erfolgreich!';
        } else {
            $errors[] = 'Die Daten waren falsch.';
        }
    }
} else if ($action == 'logout') {
    $_SESSION = array();
    $messages[] = 'Erfolgreich ausgeloggt!';
}

if (!isset($_SESSION['user'])) {
    $_SESSION['user'] = '';
}

?>



<?php foreach ($errors as $error): ?>
    <p>Fehler: <?php echo htmlspecialchars($error); ?></p>
<?php endforeach; ?>

<?php foreach ($messages as $message): ?>
    <p><?php echo htmlspecialchars($message); ?></p>
<?php endforeach; ?>

<?php if ($_SESSION['user'] !== ''): ?>

<form action="" method="post">
    <p><input type="hidden" name="action" value="logout" /><input type="submit" value="Logout" /></p>
</form>

<?php else: ?>

<form action="" method="post">
    <table width="200" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <td>Name:</td>
            <td><input type="text" name="name"></td>
        </tr>
        <tr>
            <td>Password:</td>
            <td><input type="password" name="pass"></td>
        </tr>
        <tr>
            <td colspan="2" align="center">
                <input type="hidden" name="action" value="login" /><input type="submit" value="Login" />
            </td>
        </tr>
    </table>
</form>

<?php endif; ?>

./user/test.txt:

Code:
test#098f6bcd4621d373cade4e832627b4f6

Name: test
Passwort: test

Reine MD5-Hashes sind nicht besonders sicher, weil man nach denen in einer Suchmaschine suchen kann und häufig das Passwort zurückbekommt. Du könntest einen Salt hinzufügen, wenn du unbedingt an dem System festhalten willst.
 
War denkfehler.3Sessions weil 3 verschiedene Aktionen.Versuche mal Deinen Weg.
Das mit dem Hash war mir absolut nicht klar.
Aber man lernt ja nie aus.
Versuche es aber auch mit MySql.
 
Zurück
Oben