PHP - Anfänger: Login - Skript ist fehlerhaft

Hallo!

Ich schreibe zur Zeit an einer neuen Webseite und bin bisher immer um PHP herum gekommen. Doch diesmal brauche ich ein PHP login script. Habe mir mehrere kostenlose heruntergeladen und umgebaut. Ich kann einen Admin festlegen in einer User.txt. Das Script funzt per Sessions! Das einloggen und ausloggen klappt auch. Es werden auch nur bestimmte Seiten angezeigt, wenn ich eingeloggt bin, gebe ich aber einen Benutzer ein, der nicht existiert, werde ich trotzdem eingeloggt und alle Seiten sind plötzlich sichtbar. Logge ich mich nun wieder aus und gebe den richtigen Benutzer mit Passwort ein, kommt plötzlich; Benutzer existiert nicht. Nach einiger Zeit funzt wieder alles, bis ich wieder einen falschen Benutzer eingebe!!?? Häääää?

Ich hoffe es war verständlich und jemand findet vielleicht meinen Fehler! Hier sind meine Dateien;

LOGIN.PHP:

<?php
session_start();
session_register("username");
?>
<?
include ("config.php");

$password=crypt($password,$schluessel);
$password .= "\n";
$log=0;

$userdatei = fopen ("user.txt","r");
while (!feof($userdatei))
{
$zeile = fgets($userdatei,50);
$userdata = explode("|", $zeile);
if ($userdata[0]==$username && $userdata[1]==$password)
{
$log=1;
}
}
fclose($userdatei);

if ($log==1)
{
?>

<HTML>
   <HEAD>
   </HEAD>
   <BODY bgcolor="#7FFF00">
      <table width="100%" border="0">
         <tr>
            <td><img src="images/login.ico"></img></td>
            <td align="right" valign="middle"><font size="+1" color="#008000"><b>LOGGED IN</b></font></td>
         </tr>
      </table>
      <center><b>Das Administratortool steht Ihnen nun im vollen Umfang zur Verf&uuml;gung.</b></center>
      <br><center><? echo "<a href="$logoutseite"><b>Logout</b></a>"; ?></center>
   </BODY>
</HTML>

<?
}
else
{
echo "<center><font color=FF0000><b>Login fehlgeschlagen!</b><br><br><b>Benutzer existiert nicht oder das Passwort ist falsch!</b></font><br><br><a href="$loginfailed"><b>zur&uuml;ck</b></a>";
}
?>

CONFIG.PHP:

<?
$schluessel = "TD";
$loginseite = "index.html";
$loginfailed = "login.html";
$logoutseite = "logout.php";
?>

LOGOUT.PHP:

<?php
session_start();
?>
<?php
session_start();
session_unregister("username");
?>

<HTML>
   <HEAD>
   </HEAD>
   <BODY bgcolor="#FF0000">
      <table width="100%" border="0">
         <tr>
            <td><img src="images/logout.ico"></img></td>
            <td align="right" valign="middle"><font size="+1" color="#FFFFFF"><b>LOGGED OUT!</b></font></td>
         </tr>
      </table>
      <br><center><font color="#FFFFFF"><b>Sie haben sich erfolgreich ausgeloggt und Ihre Session wurde beendet.</b></font></center>
   </BODY>
</HTML>

ANMELDEN.PHP:

<?
include("config.php");

$user_name = array();
if ($username == "" || $password == "")
{
echo "<b><font color="#FF0000">Sie haben nicht alle Felder ausgefüllt!</b></font><br><a href="" onClick="history.forward()">zurück</a>";
}
else
{
$userdatei = fopen ("user.txt","r");
while (!feof($userdatei))
{
$zeile = fgets($userdatei,100);
$userdata = explode("|", $zeile);
array_push ($user_name,$userdata[0]);
}
fclose($userdatei);

if (in_array($username,$user_name))
{
echo "<b><font color="#FF0000">Dieser Benutzername existiert schon!</b></font><br><a href="" onClick="history.forward()">zurück</a>";
}
else
{
if ($password==$password2)
{
$userdatei = fopen ("user.txt","a");
fwrite($userdatei, $username);
fwrite($userdatei, "|");
$password=crypt($password,$schluessel);
fwrite($userdatei, $password);
fwrite($userdatei, "\n");
fclose($userdatei);
header('Location: index.php?check=refresh');
}
else
{
echo "<b><font color="#FF0000">Ihr angegebenes Passwort stimmt nicht mit dem zu Widerholenden überein!</b></font><br><a href="$loginseite">zurück</a>";
}
}
}
?>

Bitte helft mir, ich verzweifele!!!

Mfg.

  1. Hi,

    session_register("username");

    übel, wenn auf dem Webspace register_globals sinnvoller Weise deaktiviert ist.

    <?
    include ("config.php");

    auf meinem Webspace hätte das Script auch hier nochmals wegen short_open_tags verloren.

    $password=crypt($password,$schluessel);

    und schon wieder bei register_globals=off verloren.

    $userdatei = fopen ("user.txt","r");
    while (!feof($userdatei))
    {
    $zeile = fgets($userdatei,50);

    hier sollte z.B. file() verwendet werden, anstatt unpassend hier 50 Zeichen und an anderer stelle 100 Zeichen auszulesen.

    Mein Tip: schmeiss das Script weg und suche Dir ein aktuelleres und besser programmiertes.

    freundliche Grüße
    Ingo

    1. Kann mir nicht jemand ein funktionsfähiges Login-Skript geben!?

      Also ich brauche eins, wo du Admins in eine User.txt geschrieben werden, dass Script muss auf jeden fall mit Sessions arbeiten!

      Weiterhin muss ich damit Seiten absichern, die ohne Login (bzw. ohne gültige Session) diese nicht sichtbar sind!

      Danke für eure Mühe!

      1. Hi,

        Also ich brauche eins, wo du Admins in eine User.txt geschrieben werden, dass Script muss auf jeden fall mit Sessions arbeiten!

        wieso das? Den Admins wäre durchaus zuzumuten, Cookies zu akzeptieren - dann bräuchten sie sich auch nicht immer neu einzuloggen. Oder Du stellst den Admin-Bereich in ein über die .htaccess geschütztes Verzeichnis.
        Ich sehe auf jeden Fall keine Notwendigkeit für Sessions.

        freundliche Grüße
        Ingo

        1. HallO!

          Aber Coockies sind doch nicht so sehr sicher, da User diese manipulieren können!

          Ich bräuchte nur ein gut gehendes Script, mehr nicht! Und wenns geht mit session!

          1. Hi,

            Aber Coockies sind doch nicht so sehr sicher, da User diese manipulieren können!

            Wenn Username und (verschlüsseltes) Passwort in Cookies gespeichert und übermittelt werden, ist eine Manipulation zwar möglich, aber was sollte das bringen? Jemand, der diese Daten kennt, bekommt egal über welche Methode Zugriff.

            freundliche Grüße
            Ingo

            1. Ja wärst du bitte so nett und würdest mir ein Script posten!? Hab zwar bei Selfhtml eins gefunden, aber das funzt net...

              1. Hi,

                Ja wärst du bitte so nett und würdest mir ein Script posten!? Hab zwar bei Selfhtml eins gefunden, aber das funzt net...

                Du kennst den "SELF"-Gedanken hier? ;-)
                Abgesehen davon: welches Script hast Du gefunden, dass nicht "funzt"?

                Wenn Du selbst keine Kenntnisse hast, um so ein simples Script zu programmieren, würde ich Dir wirklich zu einem einfachen aber sicheren serverseitigen Verzeichnisschutz: http://de.selfhtml.org/servercgi/server/htaccess.htm#verzeichnisschutz

                freundliche Grüße
                Ingo

                1. Das Script habe ich von;

                  http://schielkes.graffiede.net/downloads.php

                  und habs mir umgebaut. Und du sagst mir nun, dass es schrott ist!? In anderen Foren verweisen Sie ja auf dieses simple Script!

                  PS: Ich lerne gerade PHP

                  1. Ich finds doof, dass mir keiner helfen will...

                    Naja dann werde ich mal in einem anderen Forum posten!

                    Trotzdem danke

                    1. So ein drecksforum!

                  2. Hi,

                    http://schielkes.graffiede.net/downloads.php

                    und habs mir umgebaut. Und du sagst mir nun, dass es schrott ist!? In anderen Foren verweisen Sie ja auf dieses simple Script!

                    ja und - Du findest haufenweise schrottige Scripte im Netz, auf die unkundige User auch verweisen. Allein schon die Demo (http://schielkes.graffiede.net/demos/login/ | verlinken lohnt nicht) dieses 5 Jahre alten (!) Scripts spricht für sich - wenn man daas Formular ohne Eingaben abschickt, kommt:

                    "PHP Login

                    Benutzer existiert nicht oder das Passwort ist falsch!
                    zurück
                    Warning: Unknown(): write failed: Disk quota exceeded (122) in Unknown on line 0

                    Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0"

                    freundliche Grüße
                    Ingo

                    1. Ja ich weiß ja nicht.

                      Wenn mir das Script 4 User vorschlagen, denkt man schon, dass es was ordentliches ist!