Hallo,
es geht um mein Einlog-Script. Hier der Anfang der Datei welche aufgerufen wird nachdem der Login-Button gedrückt wurde:
<?php
if($LoginButton == "Einloggen")
{
if($lnick == "")
die("<p>Bitte einen Benutzernamen eintragen.</p>");
if($lpw == "")
die("<p>Bitte Passwort eintragen.</p>");
if($prefix == " ")
die("<p>Bitte Allianz auswählen.</p>");
include("inc/dbconnect.php");
$sql = "SELECT ID, nick, level, activated, pw FROM ".$prefix."users WHERE nick='$lnick'";
$result = @mysql_query($sql);
$row = @mysql_fetch_array($result);
$pw = $row["pw"];
if($lpw == $pw)
{
$activated = $row["activated"];
if($activated == "N")
die("<p>Du bist nocht nicht freigeschalten! Bitte wende dich an einen Admin.</p>");
@session_start();
$prefix = $_POST['prefix'];
$uid = $row["ID"];
$level = $row["level"];
$user = $row["nick"];
$eingeloggt = TRUE;
session_register('eingeloggt');
session_register('uid');
session_register('level');
session_register('user');
session_register('prefix');
}
else
die("<p>Nick/Passwort Kombination ungültig, bitte erneut versuchen.<br><a href='index.php'>Zurück</a>");
}
else
{
include("inc/session.php");
}
Wie man sieht wird nach dem Drücken des Einlogg-Buttons geprüft ober die User/Passwort-Kombination stimmt und falls ja wird geprüft ob der User freigeschalten wurde. Wenn dies alles wahr ist, wird die session gestartet und diverese Variablen registriert. Wird die Seite(im oberen Fall "home.php") erneut aufgerufen, ist die Variable $LoginButton nichtmehr gesetzt und die Datei session.php wird includet. Diese Datei wird auf jeder Seite oben mittels include("inc/session.php"") eingefügt und steht immer GANZ oben, vorher kommt kein Code.
Hier die gesammte session.php:
<?php
@session_start();
if ( !$_SESSION['eingeloggt'] )
{
die("<p>Sicherheitsfehler</p>");
}
$user = $_SESSION['user'];
$level = $_SESSION['level'];
$uid = $_SESSION['uid'];
$prefix = $_SESSION['prefix'];
?>
Ich habe ein @ vor session_start() geschrieben um die Fehlermeldung zu unterdrücken welche sonst IMMER kommt(egal wo session_start() steht). Diese sieht so aus:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /srv/www/htdocs/web26/html/home.php:2) in /srv/www/htdocs/web26/html/home.php on line 26
Sie haben oben ja den ganzen Anfang von home.php und können nachschauen was in den einzelnen Zeilen steht. So nun zu meinem Problem: In ca. 50% der Fälle klappt alles wunderbar und funktioniert so wie es soll, man kann die ganze Seite durchsurfen, so oft die Menü-Punkte anwählen wie man will.
Aber genauso oft passiert es, dass man sich einloggt, der Inhalt von home.php auch richtig angezeigt wird, nur dann, egal wo man draufklickt(ob jetzt nochmal home.php oder andere Seiten auf denen oben immer als erstes session.php eingefügt wird), es kommt die Fehlermeldung "Sicherheitsfehler." was ja eigentlich bedeutet dass die Variable $eingeloggt in der session nicht existiert, was sie aber tun müsste(wir gehen immer davon aus dass sich der User erfolgreich eingeloggt hat). Ich weiß wirklich nicht woran das liegt. Die Tatsache, dass es auf dem alten Server(wie immer ) NIE Probleme damit gab und es ja auch manchmal funktioniert, zeigt dass der Code nicht sooo falsch sein kann.
Wäre großartig wenn mir jemand helfen könnte das Problem zu lösen!
mfg...
es geht um mein Einlog-Script. Hier der Anfang der Datei welche aufgerufen wird nachdem der Login-Button gedrückt wurde:
<?php
if($LoginButton == "Einloggen")
{
if($lnick == "")
die("<p>Bitte einen Benutzernamen eintragen.</p>");
if($lpw == "")
die("<p>Bitte Passwort eintragen.</p>");
if($prefix == " ")
die("<p>Bitte Allianz auswählen.</p>");
include("inc/dbconnect.php");
$sql = "SELECT ID, nick, level, activated, pw FROM ".$prefix."users WHERE nick='$lnick'";
$result = @mysql_query($sql);
$row = @mysql_fetch_array($result);
$pw = $row["pw"];
if($lpw == $pw)
{
$activated = $row["activated"];
if($activated == "N")
die("<p>Du bist nocht nicht freigeschalten! Bitte wende dich an einen Admin.</p>");
@session_start();
$prefix = $_POST['prefix'];
$uid = $row["ID"];
$level = $row["level"];
$user = $row["nick"];
$eingeloggt = TRUE;
session_register('eingeloggt');
session_register('uid');
session_register('level');
session_register('user');
session_register('prefix');
}
else
die("<p>Nick/Passwort Kombination ungültig, bitte erneut versuchen.<br><a href='index.php'>Zurück</a>");
}
else
{
include("inc/session.php");
}
Wie man sieht wird nach dem Drücken des Einlogg-Buttons geprüft ober die User/Passwort-Kombination stimmt und falls ja wird geprüft ob der User freigeschalten wurde. Wenn dies alles wahr ist, wird die session gestartet und diverese Variablen registriert. Wird die Seite(im oberen Fall "home.php") erneut aufgerufen, ist die Variable $LoginButton nichtmehr gesetzt und die Datei session.php wird includet. Diese Datei wird auf jeder Seite oben mittels include("inc/session.php"") eingefügt und steht immer GANZ oben, vorher kommt kein Code.
Hier die gesammte session.php:
<?php
@session_start();
if ( !$_SESSION['eingeloggt'] )
{
die("<p>Sicherheitsfehler</p>");
}
$user = $_SESSION['user'];
$level = $_SESSION['level'];
$uid = $_SESSION['uid'];
$prefix = $_SESSION['prefix'];
?>
Ich habe ein @ vor session_start() geschrieben um die Fehlermeldung zu unterdrücken welche sonst IMMER kommt(egal wo session_start() steht). Diese sieht so aus:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /srv/www/htdocs/web26/html/home.php:2) in /srv/www/htdocs/web26/html/home.php on line 26
Sie haben oben ja den ganzen Anfang von home.php und können nachschauen was in den einzelnen Zeilen steht. So nun zu meinem Problem: In ca. 50% der Fälle klappt alles wunderbar und funktioniert so wie es soll, man kann die ganze Seite durchsurfen, so oft die Menü-Punkte anwählen wie man will.
Aber genauso oft passiert es, dass man sich einloggt, der Inhalt von home.php auch richtig angezeigt wird, nur dann, egal wo man draufklickt(ob jetzt nochmal home.php oder andere Seiten auf denen oben immer als erstes session.php eingefügt wird), es kommt die Fehlermeldung "Sicherheitsfehler." was ja eigentlich bedeutet dass die Variable $eingeloggt in der session nicht existiert, was sie aber tun müsste(wir gehen immer davon aus dass sich der User erfolgreich eingeloggt hat). Ich weiß wirklich nicht woran das liegt. Die Tatsache, dass es auf dem alten Server(wie immer ) NIE Probleme damit gab und es ja auch manchmal funktioniert, zeigt dass der Code nicht sooo falsch sein kann.
Wäre großartig wenn mir jemand helfen könnte das Problem zu lösen!
mfg...
Kommentar