Eine exit Frage

Kracky

Mitglied
Hallo,

Ich beschütze die Seiten für die ein Login gebraucht wird mit folgendem Code

PHP:
if(!isset($_SESSION["username"]))
   {
   echo "Du bist nicht angemeldet";
   exit;
   }
?>

Alle Seiten werden immer in ein Content DIV eingebunden welches aus einem Header, dem eigentlichen Content Bereich und dem Footer besteht.

Wenn jetzt jemand nicht angemeldet ist wird ja das Script mit exit beendet.

Das Problem an der Sache ist aber das er danach auch den Footer DIV nicht mehr anzeigt, er führt quasi absolut keinen Code mehr danach aus auch kein HTML.

Weiß jemand wie ich dieses Problem beheben kann? Und ist diese Methode der absicherung von Seiten überhaupt sicher?
 
Wenn die Seiten in ein DIV eingebunden werden dann doch sicher mit include oder ähnlichem?

Dann mache es doch so:

PHP:
if(!isset($_SESSION["username"])) {
    echo "Du bist nicht angemeldet";
} else {
    include("eigentliche_seite.php");
}

Oder binde in einem soclehn Fall die Seite zum Anmelden ein.
 
Danke für die Antwort aber ohne den exit befehl führt er das Script ja trozdem weiterhin aus.

Zur besseren Übersicht:

Es gibt eine Index Seite mit einem Navigations- und einem Contentdiv.
In der Navigation wird etwas angeklickt und über include in den Content geladen.

z.B. intern.php

In dieser steht dann ganz am Anfang der im ersten Post schon beschriebene Code und danach alles was angezeigt werden soll wenn dann eine session exestiert.

Würde ich es jetzt so wie du machen dann würde dort einfach nur stehen

Du bist nicht angemeldet
Nachfolgender Interner Inhalt.

Außerdem wäre diese Seite die includet wird ja dann auch manuell über die URL abrufbar was ja nicht passieren soll ^^
 
Also ich würde Dir erstmal raten, dass Du dir eine extra Session Klasse baust mit der Du das Handlest (nur so nebenbei). ;)

Auch würde ich, wenn ich Du wäre, die Session über eine Sessin Id (Die Du aus der Datenbank abfragen kannst prüfen (setze Auto increment)) abfragen, denn da jeder User eine andere bekommt können nicht so leichtProbleme mit dem usernamehandling entstehen.

Zu Deinem Problem:

PHP:
exit;

Beendet das Script! Alles was dahinter steht (sofern exit ausgeführt wird) wird nicht ausgeführt. Du koenntest es natürlich direkt über die Session Schleife machen, allerdings ist es ein bisschen angenehmer wenn du in der Schleife die das Abfragst eine Variable o.ä (lass dir was einfallen) deklarierst und die mit nem true oder false Wert füllst. Dann kannst du nochmal extra prüfen und erhöst dir auch nochmal die Lesbarkeit deines Codes (sofern es ein größeres Projekt ist).

EDIT:

oder mach einfach in dein Script welches du einbinden möchtest eine abfrage
(ich mach es jetzt mal mit ner Theoretischen Klasse)
PHP:
if(!session->isUserLoggedIn){
    echo 'bldjasfhkajdshf';
    header("location: login.php");
   // header("location: Fehlermeldung.php");

}
 
Zuletzt bearbeitet:
PHP:
//index.php
if( !isset($_SESSION['username']) ){
  echo 'Bitte logge dich ein.';
}
include_once 'normale_seite.php';
if( isset($_SESSION['username']) ){
  include_once 'interne_seite.php';
}

PHP:
//interne_seite.php
if( !isset($_SESSION['username']) ){ //Wenn Seite direkt aufgerufen wird
  die('Logge dich ein um die Seite zu sehen.');
}
 
Zuletzt bearbeitet:
Wenn du die "geschützen" Seiten über einen Link aufrufst, dann ja irgendwie so "index.php?seite=1".

Damit rufst du die index.php auf und prüfst mit obiger IF-Anweisung innerhalb der index.php ob die aufgerufene Seite angezeigt werden darf oder nicht.

Am Anfang der "geschützten" Seiten schreibst du dann zusätzlich noch:

PHP:
if(!isset($_SESSION["username"])) header("Location: index.php");
 
Am Anfang der "geschützten" Seiten schreibst du dann zusätzlich noch:

PHP:
if(!isset($_SESSION["username"])) header("Location: index.php");

Das hilft nicht viel, das ist nur eine Weiterleitung, das Skript selber wird trotzdem ausgeführt. Wenn man weis wie kann man so sehr viel Schaden anrichten.
 
Zurück