You are not logged in.

  • Login

1

Wednesday, March 5th 2008, 9:44pm

PHP-Login mit Sessions

Moin, bin grad leider nicht zu Hause und habe hier keine Möglichkeit meine Frage durch ausprobieren/testen zu klären.

Szenario:
Habe ein Script welches bestimmte Bereiche nur bestimmten Benutzern zur Verfügung stellt.
Login ist via Sessions geregelt.

Seite ist wie folgt aufgebaut:
  • index.php
  • header.inc.php
  • navi.inc.php
  • news.inc.php
  • artikel.inc.php
  • footer.inc.php
Die Dateien mit der Endung inc.php werden via include() in der Datei index.php eingebunden. (je nachdem welchen wert die Variable do hat wird entweder news.inc.php, oder artikel.inc.php eingebunden.

In der index.php ist auch die Überprüfung ob der User eingeloggt ist.

Der User könnte jetzt trotzdem z.B. die news.inc.php aufrufen und würde diese angezeigt bekommen, obwohl dieser nicht eingeloggt ist.

Die Überprüfung in der index.php könnte z.B. so aussehen:

PHP Quellcode

1
2
3
4
5
6
7
8
9
session_start (); 
if (!isset ($_SESSION["user_id"])) 
{ 
   header ("Location: login.php"); 
} 
if($_SESSION['IP'] != $_SERVER['REMOTE_ADDR']) 
{
   header ("Location: login.php");
}


Kann ich diese Überprüfung auch in alle anderen Dateien einbauen, ohne das es zu Komplikationen kommt?
Wenn ich dies mit in die anderen Dateien einbaue dan habe ich dies, wenn die index.php aufgerufen wird ja mehrmals.

Weshalb ich unsicher bin, ist der Grund, dass ich dann ja auch mehrmals session_start() aufrufe. Kann es da zu Problemen kommen?


Kanns jetzt leider nicht testen, jedoch bin ich sehr neugierig und vielleicht weiß es ja jemand auf die Schnelle. :)


Danke!

Gruß: elzumo

2

Wednesday, March 5th 2008, 10:58pm

Wenn du die PHP-Dateien mit dem include (oder require) Befehl lädst, musst du deinen Überprüfungscode nur in die index.php schreiben ;)

3

Thursday, March 6th 2008, 12:13am

Ja, aber dann kann man ja trotzdem die news.inc.php aufrufen und das ohne das man eingeloggt ist.

4

Thursday, March 6th 2008, 9:08am

"Aufrufen" naja... wenn man nicht angemeldet ist, wird man auf die login.php weitergeleitet.

Übrigens solltest du die verschiedenen Bedingungen Verknüpfen.

PHP Quellcode

1
if(bedingung1 || bedingung2)

5

Thursday, March 6th 2008, 11:35am

Ja das ist so korrekt, jedoch nur wenn man die index.php aufruft.
Wenn man z.B. die navi.inc.php (im Browser) aufruft wird diese angezeigt.

Kann ich ohne, dass es zu Problemen kommt die Überprüfung ob angemeldet auch z.B. in der navi.inc.php einbinden.
Was mir nicht ganz klar ist, ist dass wenn dann die index.php aufgeruden wird diese Überprüfung mehrmals stattfindet also auch das session_start()
Darf man das?

6

Thursday, March 6th 2008, 12:08pm

Mach' es doch mit Variablen ;)

Du definierst in der index.php eine Variable und wenn die in news.inc.php nicht auf true steht, dann gib nichts aus :D

7

Thursday, March 6th 2008, 12:27pm

Das wäre eine Möglichkeit, auf die Idee bin ich gar nicht gekommen. :)

Wie sieht es bei dieser Variante mit der Sicherheit aus?

8

Thursday, March 6th 2008, 2:13pm

Ist meines Wissens recht sicher.

" allow_url_include " sollte in der php.ini sowieso auf OFF stehen! Das verhindert, dass Dateien von anderen Webservern "include"t werden ;)

9

Thursday, March 6th 2008, 8:07pm

mach doch die prüfung in eine seperate Datei und binde sie mit require_once ein.
Ein Include Guard sorgt, dann dafür, dass sie nur einmal benutzt wird.

10

Thursday, March 6th 2008, 11:04pm

Haha, da bin ich gar nicht drauf gekommen mit require_once.
Vielen Dank! :)

Similar threads

Social bookmarks