Seite schützen?

lissylucky

Mitglied
Hallo,

wie kann ich eine Seite schützen, sodass man sich um den Inhalt zu sehen einloggen muss.
Ist man eingeloggt, kann man die Seite sehen, wenn nicht soll man zum Login weitergeleitet werden. Geht das?
 
Ja das geht.
Du baust zuerst einen Login. Wenn man sich richtig einloggt, dann wird eine Sessionvariable gesetzt, z.B. isLoggedIn=true.
Nun prüfst du bei jeder Seite, ob der User eingeloggt ist, wenn nicht dann leitest du zum Login weiter.

Eine weitere Möglichkeit wäre .htaccess, wobei du dann aber keine komfortable Datenbanktabelle für die User einsetzen kannst und die Loginform nur ein Dialog ist.
 
Also der Login existiert schon.
das ist die Login.php

Code:
<?php 
ob_start();
session_start(); 
?> 

<?php 
$verbindung = mysql_connect("**********", "***************" , "*************") 
or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); 
mysql_select_db("************") or die ("Datenbank konnte nicht ausgewählt werden"); 

$email = $_POST["email"]; 
$passwort = md5($_POST["passwort"]); 

$abfrage = "SELECT email, passwort FROM login WHERE email LIKE '$email' LIMIT 1"; 
$ergebnis = mysql_query($abfrage); 
$row = mysql_fetch_object($ergebnis); 

if($row->passwort == $passwort) 
    { 
    $_SESSION["email"] = $email; 
	header("Location: redeem.html");  
	exit();
	}
else 
    { 
    echo "E-Mail und/oder Passwort waren falsch. <a href=\"index2.html\">Login</a>"; 
    } 

ob_end_flush()
?>


Wie müsste der Code dann aussehen?
 
Naja du leitest dann ja auf die Datei "redeem.html" weiter. Ich vermute mal dies ist eine normale HTML-Datei. Diese könntest du dann theoretisch auch ohne Login aufrufen!
Deshalb musst du draus eine PHP-Datei machen und prüfen, ob der User eingeloggt ist.

Z.B. bei dir:
PHP:
function IsLoggedIn()
{
  return (isset($_SESSION["email"])?true:false);
}

//  redeem.html
if (!IsLoggedIn())
{
  header("Location: index2.html"); // Zum Login
  exit();
}

Übrigens möchte ich noch erwähnen, dass du bei deinem MySQL-Query die Variablen von $_POST einfach so einsetzt! Das ist sehr gefährlich!
Ich würde dir Punkt 3 meines Tutorials zu empfehlen: Sicherheit in PHP-Codes schaffen
Außerdem wieso prüfst du nicht auf MySQL-Ebene, ob der Benutzername und das Passwort richtig sind?
Zum Beispiel so:
PHP:
"SELECT email FROM login WHERE email='$email' AND passwort='$passwort'"
 
Ich würde einfach einen Timestamp beim Start anlegen und jeweils vergleichen:
PHP:
/* Login */
$_SESSION["email"] = $email; 
$_SESSION["startTime"] = time();
header("Location: redeem.html");  
exit();

/* Überarbeitete Funktion IsLoggedIn() */
function IsLoggedIn()
{
  if (isset($_SESSION["email"]))
  {
   /* Wenn Zeitspanne größer als 600 Sekunden (=10 Minuten), dann...
   if (time()-$_SESSION["startTime"]>=600)
   {
      Logout();
      return false;
   }
   else
      return true;
  }
  return false;
}

/* Neue Funktion Logout() */
function Logout()
{
  unset($_SESSION["email"]);
  unset($_SESSION["startTime"]);
  // evtl. weitere Dinge...
}
 
Okay.
Ich habe aber das Problem, dass ich jetzt obwohl der Account richtig ist, wieder zum Login geleitet werde. (Auch mit dem oberen Code)

Mit dem neuen Code kommt folgende Fehlermeldung:

Parse error: syntax error, unexpected $end in /var/www/web131/html/andre/entwicklung/redeem.php on line 634

In Zeile 634 steht folgendes

 
Zuletzt bearbeitet:
Habe gerade gesehen, dass ich den Kommentar oben nicht geschlossen habe.
Vielleicht liegt es daran.
Überarbeiteter Code:
PHP:
/* Login */
$_SESSION["email"] = $email; 
$_SESSION["startTime"] = time();
header("Location: redeem.html");  
exit();

/* Überarbeitete Funktion IsLoggedIn() */
function IsLoggedIn()
{
  if (isset($_SESSION["email"]))
  {
   /* Wenn Zeitspanne größer als 600 Sekunden (=10 Minuten), dann... */
   if (time()-$_SESSION["startTime"]>=600)
   {
      Logout();
      return false;
   }
   else
      return true;
  }
  return false;
}

/* Neue Funktion Logout() */
function Logout()
{
  unset($_SESSION["email"]);
  unset($_SESSION["startTime"]);
  // evtl. weitere Dinge...
}
Bzw. falls es immer noch auftritt, poste mal den Code (PHP + HTML).
 
Zurück