Benutzer im Login

multimoltis Methode hat den Vorteil, dass kein Dritter die Logininformationen lesen kann. Wenn du's trotzdem mit ner Textdatei umsetzen möchtest, wär hier ne einfache Möglichkeit.

Aubau der Textdatei:
Code:
username e8636ea013e682faf61f56ce1cb1ab5c
test 098f6bcd4621d373cade4e832627b4f6
Format: username Passwort-MD5-Hash
Sind zwar nur Standard-MD5s, aber für den Zwecks tut's das auch.

Auslesen der Benutzer und Passworthashes:
PHP:
//Textdatei auslesen
$handle = @fopen('text.txt', "r");
if($handle) {
	while(!feof($handle)) {
		//Einzelne Zeilen auslesen
		$lines[] = fgets($handle, 4096);
	}
	fclose($handle);
}

//Array, mit dem gearbeitet wird
$benutzer = array();

//Ausgelesene Zeilen zerlegen
for($i=0; $i<count($lines); $i++) {
	$temp = explode(" ",$lines[$i]);
	
	array_push($benutzer, $temp);
}

Nach dem Auslesen sieht das Array dann so aus:
Code:
Array (
	[0] => Array (
		[0] => username
		[1] => e8636ea013e682faf61f56ce1cb1ab5c
	)
	[1] => Array (
		[0] => test
		[1] => 098f6bcd4621d373cade4e832627b4f6
	)
)
Damit lässt sich dann schön arbeiten.

Mir scheint beides gleich schwer / leicht zu sein. Was ist sicherer?!
 
Die zweite Methode wollte ich dir eigentlich vorschlagen, dann ist mir das mit dem PHP-Array eingefallen...
Wenn du bei meiner Methode auch anstatt Klartext-Passwörtern MD5-Hashes verwendest und bei DaveStans Methode die .htaccess einsetzt, ist beides gleichsicher. Falls dein Server kein htaccess unterstützen sollte, nimm meine Methode, denn bei der wird niemand jemals an die Daten innerhalb der PHP-Datei rankommen.

Und schwer/kompliziert sind beide Methoden nicht, lies dir am besten mal ein Anfängertutorial für PHP durch, dann verstehst du das ganz schnell!
 
Das hier könnte was für dich sein, habs mir aber nicht genauer angeschaut:
http://www.webmaster-talk.com/php-forum/113648-login-script-without-mysql.html

Du kannst dir das Leben auch viel einfacher machen, und anstatt einer TXT-Datei eine PHP-Datei schreiben, in der nur die Daten für alle User drinstehen, dann brauchst du nicht mal die .htaccess-Datei.
Die PHP-Datei sähe dann so aus:
PHP:
<?php
// ## DATEINAME: userdata.php
$users = array();
$users[] = array("name" => "benutzer1", "pass" => "password1");
$users[] = array("name" => "benutzer2", "pass" => "password2");
$users[] = array("name" => "benutzer3", "pass" => "password3");
?>
Diese Datei könntest du per "include(<Dateiname>);" laden, dein Haupt-Login-Script hat das Array $users dann gespeichert.
Jetzt schaust du für jeden Benutzer, ob die eingegebenen Daten mit den Benutzerdaten übereinstimmen:
PHP:
// ## DATEINAME: login.php
// irgendwie Eingabedaten verarbeiten und in $username und $password speichern

include("userdata.php");

$loggedin = false;
foreach($users as $user)
{
    if($user['name'] == $username && $user['pass'] == $password)
    {
         $loggedin = true;
         break;
    }
}
if($loggedin)
    echo "Eingeloggt!";
else
    echo "Benutzername oder Passwort falsch!";

Mir fallen jetzt noch 1000 Ideen ein, wie du das alternativ machen könntest, frag einfac, falls du es anders haben willst.

hab grad ein bischen Choas^^

hab jetzt die datei included dein anderen Teil noch dazu getan, aber irgendwie hat es noch einen Fehler, weil noch ein Teil des alten Teil
s drin ist schau doch kurz selbst:

PHP:
<?php
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      session_start();

      $username = $_POST['username'];
      $passwort = $_POST['passwort'];

      $hostname = $_SERVER['HTTP_HOST'];
      $path = dirname($_SERVER['PHP_SELF']);

      // Benutzername und Passwort werden überprüft
include("userdata.php");

$loggedin = false;
foreach($users as $user)
{
    if($user['name'] == $username && $user['pass'] == $password)
    {
         $loggedin = true;
         break;
    }
}
if($loggedin)
    echo "Eingeloggt!";
else
    echo "Benutzername oder Passwort falsch!";  
	       // Weiterleitung zur geschützten Startseite
       if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
        if (php_sapi_name() == 'cgi') {
         header('Status: 303 See Other');
         }
        else {
         header('HTTP/1.1 303 See Other');
         }
        }

       header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');
       exit;
       }
   
?>

Im html Teil ist noch das Eintrageformular:

HTML:
      <form action="login.php" method="post">
        <p>Username: </p>
        <p>
          <input name="username" type="text" value="" size="20px" />
        </p>
        <p>Passwort:</p>
   <p><input name="passwort" type="password" size="20px" />
             <p><input type="submit" value="Anmelden" />
        </p>
    </form>

ich denke dass stimmt schon. Aber du kannst mir bestimmt sagen.
 
Du musst das ein bisschen umändern:

PHP:
<?php 
     if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
      session_start(); 

      $username = $_POST['username']; 
      $passwort = $_POST['passwort']; 

      $hostname = $_SERVER['HTTP_HOST']; 
      $path = dirname($_SERVER['PHP_SELF']); 

      // Benutzername und Passwort werden überprüft 
include("userdata.php"); 

$loggedin = false; 
foreach($users as $user) 
{ 
    if($user['name'] == $username && $user['pass'] == $password) 
    { 
         $loggedin = true; 
         break; 
    } 
} 
if($loggedin) 
{

           // Weiterleitung zur geschützten Startseite 
       if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') 
       { 
        if (php_sapi_name() == 'cgi') 
         { 
         header('Status: 303 See Other'); 
         } 
        else 
        { 
         header('HTTP/1.1 303 See Other'); 
         } 
        } 

       header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php'); 
       exit; 
       } 
       else
       {
               echo "Eingeloggt, aber Server unterstützt kein HTTP/1.1!";
       }
}
else 
    echo "Benutzername oder Passwort falsch!";   
    
?>

Obwohl ich nicht verstehe, was der ganze Quatsch mit den Headern soll...
 
Du musst das ein bisschen umändern:

PHP:
<?php 
     if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
      session_start(); 

      $username = $_POST['username']; 
      $passwort = $_POST['passwort']; 

      $hostname = $_SERVER['HTTP_HOST']; 
      $path = dirname($_SERVER['PHP_SELF']); 

      // Benutzername und Passwort werden überprüft 
include("userdata.php"); 

$loggedin = false; 
foreach($users as $user) 
{ 
    if($user['name'] == $username && $user['pass'] == $password) 
    { 
         $loggedin = true; 
         break; 
    } 
} 
if($loggedin) 
{

           // Weiterleitung zur geschützten Startseite 
       if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') 
       { 
        if (php_sapi_name() == 'cgi') 
         { 
         header('Status: 303 See Other'); 
         } 
        else 
        { 
         header('HTTP/1.1 303 See Other'); 
         } 
        } 

       header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php'); 
       exit; 
       } 
       else
       {
               echo "Eingeloggt, aber Server unterstützt kein HTTP/1.1!";
       }
}
else 
    echo "Benutzername oder Passwort falsch!";   
    
?>

Obwohl ich nicht verstehe, was der ganze Quatsch mit den Headern soll...

Jetzt funktioniert gar nichts mehr!
 
Ich kann nur den Quelltext sehen, den du mir gegeben hast. Das war sicherlich nicht alles. Poste alles genau so, wie es in der Datei steht, dann kann ich das mal versuchen. Und sag mir am besten, wohin du bisher weitergeleitet wirst, wenn du dich einloggst.
 
Ich kann nur den Quelltext sehen, den du mir gegeben hast. Das war sicherlich nicht alles. Poste alles genau so, wie es in der Datei steht, dann kann ich das mal versuchen. Und sag mir am besten, wohin du bisher weitergeleitet wirst, wenn du dich einloggst.

PHP:
// login.php

<?php  
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {  
      session_start();  

      $username = $_POST['username'];  
      $passwort = $_POST['passwort'];  

      $hostname = $_SERVER['HTTP_HOST'];  
      $path = dirname($_SERVER['PHP_SELF']);  

      // Benutzername und Passwort werden überprüft  
include("userdata.php");  

$loggedin = false;  
foreach($users as $user)  
{  
    if($user['name'] == $username && $user['pass'] == $password)  
    {  
         $loggedin = true;  
         break;  
    }  
}  
if($loggedin)  
{ 

           // Weiterleitung zur geschützten Startseite  
       if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1')  
       {  
        if (php_sapi_name() == 'cgi')  
         {  
         header('Status: 303 See Other');  
         }  
        else  
        {  
         header('HTTP/1.1 303 See Other');  
         }  
        }  

       header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/index.php');  
       exit;  
       }  
       else 
       { 
               echo "Eingeloggt, aber Server unterstützt kein HTTP/1.1!"; 
       } 
} 
else  
    echo "Benutzername oder Passwort falsch!";    
     
?>

HTML:
<!-- Dies ist der body Teil der login.php -->
    <h1>Willkommen im Login</h1>
    <p><img alt="" src="icons/dialog-password.svg"></p>
    <h2>Gib bitte Name und Passwort ein!</h2>
      <form action="login.php" method="post">
        <p>Username: </p>
        <p>
          <input name="username" type="text" value="" size="20px" />
        </p>
        <p>Passwort:</p>
   <p><input name="passwort" type="password" size="20px" />
             <p><input type="submit" value="Anmelden" />
        </p>
    </form>

PHP:
// index.php 
// Zu dieser Seite wird man bei erfolgreichem Login weitergeleitet.

<?php include('auth.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Geschützter Bereich</title>
 </head>
<body>
<h1>Herzlichen Glückwunsch!</h1>
 <p>Hier entsteht eine neue Umgebung.</p>
  <p>Sie sind nun angemeldet.</p>
 <p>Sie können sich auch wieder <a href="logout.php">abmelden</a>.</p>
</body>
</html>

PHP:
// userdata.php
// Hier sollte man vielleicht noch die auth.php includen?!
<?php
$users = array();
$users[] = array("name" => "user1", "pass" => "pw1");
$users[] = array("name" => "user2", "pass" => "pw2");
$users[] = array("name" => "user3", "pass" => "pw3");
?>

PHP:
// logout.php
<?php
     session_start();

     $hostname = $_SERVER['HTTP_HOST'];
     $path = dirname($_SERVER['PHP_SELF']);

     if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
      header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/login.php');
      exit;
      }
?>

PHP:
// auth.php
<?php
     session_start();

     $hostname = $_SERVER['HTTP_HOST'];
     $path = dirname($_SERVER['PHP_SELF']);

     if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
      header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/login.php');
      exit;
      }
?>

so, dass wäre alles!
 
Ich hab das jetzt zwar nicht ausgetestet, aber spontan fallen mir zu späterer Stunde doch ein paar Kleinigkeiten auf...

In der login.php definierst du oben $passwort:
PHP:
$passwort = $_POST['passwort'];
Darunter greifst du dann allerdings auf $password (mit d) zu:
PHP:
$loggedin = false;  
foreach($users as $user)  
{  
    if($user['name'] == $username && $user['pass'] == $password)  
    {  
         $loggedin = true;  
         break;  
    }  
}
Ich gebe zu, auch ich kann mich nicht immer zwischen deutschen und englischen Variablennamen entscheiden (oft endets dann so halb-halb ;-)). Aber sowas hier ist dann schon etwas kniffliger - zumal es halt hinterher doch so offensichtlich war :)

Der eigentliche Fehler, warum es nicht mehr geht, liegt aber wohl an - oder vielmehr in den If-Abfragen. Etwas Codeformatierung dürfte dir eigentlich helfen, den Fehler in dem Abschnitt zu entdecken...
PHP:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {   	
	
	//...weiterer Code...
	
	if($loggedin) {
		// Weiterleitung zur geschützten Startseite
		//...  
	} else {
		echo "Eingeloggt, aber Server unterstützt kein HTTP/1.1!"; 
	} 
} else {
    echo "Benutzername oder Passwort falsch!";
}


Ach, bevor ich's vergess: kann es sein, dass du den Inhalt der logout.php zweimal gepostet hast? Oder ist die auth.php inhaltlich wirklich gleich?

Gruß aus dem Halbschlaf :)
 
Zuletzt bearbeitet:
Ich hab das jetzt zwar nicht ausgetestet, aber spontan fallen mir zu späterer Stunde doch ein paar Kleinigkeiten auf...

In der login.php definierst du oben $passwort:
PHP:
$passwort = $_POST['passwort'];
Darunter greifst du dann allerdings auf $password (mit d) zu:
PHP:
$loggedin = false;  
foreach($users as $user)  
{  
    if($user['name'] == $username && $user['pass'] == $password)  
    {  
         $loggedin = true;  
         break;  
    }  
}
Ich gebe zu, auch ich kann mich nicht immer zwischen deutschen und englischen Variablennamen entscheiden (oft endets dann so halb-halb ;-)). Aber sowas hier ist dann schon etwas kniffliger - zumal es halt hinterher doch so offensichtlich war :)

Der eigentliche Fehler, warum es nicht mehr geht, liegt aber wohl an - oder vielmehr in den If-Abfragen. Etwas Codeformatierung dürfte dir eigentlich helfen, den Fehler in dem Abschnitt zu entdecken...
PHP:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {   	
	
	//...weiterer Code...
	
	if($loggedin) {
		// Weiterleitung zur geschützten Startseite
		//...  
	} else {
		echo "Eingeloggt, aber Server unterstützt kein HTTP/1.1!"; 
	} 
} else {
    echo "Benutzername oder Passwort falsch!";
}


Ach, bevor ich's vergess: kann es sein, dass du den Inhalt der logout.php zweimal gepostet hast? Oder ist die auth.php inhaltlich wirklich gleich?

Gruß aus dem Halbschlaf :)

Sorry, dies ist noch der logout.

PHP:
<?php
     session_start();
     session_destroy();

     $hostname = $_SERVER['HTTP_HOST'];
     $path = dirname($_SERVER['PHP_SELF']);

     header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/login.php');
?>

Ich probier das jetzt gleich mal aus.

MfG
 
Zurück