Problem mit Loginscript
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
benutzerdaten
code
datei
demo
eingabe
entfernen
fehler
fehlermeldung
header
index
kennwort
login
output
schauen
session
start
teddy
text
url
zeichen
-
Hallo !
Ich programmiere derzeit einen Adminbereich für meine Seite. Beim Loginsystem tritt allerdings ein Fehler auf.
Ich habe schon nach dem Fehler gesucht, auch schon mit Google, aber ohne Erfolg. Vielleicht könnt Ihr mir ja helfen.
Meine login.php
<?php if(!isset($_POST['name']) || $_POST['name'] == ""){ header ("Location: index.html?fehler=1"); } else { // Session starten session_start (); include ("../sql.php"); $pass = $_POST['name']; $sql = "SELECT ". " * ". "FROM ". "benutzerdaten ". "WHERE ". "(Nickname = '".$pass."') AND ". "(Kennwort = '".md5($_REQUEST["pwd"])."')"; $result = mysql_query ($sql); if (mysql_num_rows ($result) > 0) { // Benutzerdaten in ein Array auslesen. $data = mysql_fetch_array ($result); // Sessionvariablen erstellen und registrieren $_SESSION["user_id"] = $data["Id"]; $_SESSION["username"] = $data["Nickname"]; $_SESSION["user_pw"] = $data["Kennwort"]; header ("Location: start.php"); } else { header ("Location: index.html?fehler=1"); } } ?>
die Logout.php
<?php // Wird ausgeführt um mit der Ausgabe des Headers zu warten. ob_start (); session_start (); session_unset (); session_destroy (); header ("Location: index.html"); ob_end_flush (); ?>
die checkuser.php, die in jede Unterseite eingebunden wird:
<?php session_start (); if (!isset ($_SESSION["username"])) { header ("Location: index.html"); } ?>
die Seite nach dem Login:
<?php include ("checkuser.php"); ?> <html> <head> <meta http-equiv='Content-Language' content='de'> <meta http-equiv='Content-Type' content='text/html; charset=windows-1252'> <title>Adminbereich</title> <link href="default.css" rel="stylesheet" type="text/css"> </head> <body> <div id="container"> <div id="main"> <div id="head"> <div id="logo"> </div> </div> <div id="body"> <div id="column"> <div id="menu3"> </div> </div> <div id="content"><div id="page"> <h1>Startseite</h1> <div class="content" id="pageDescription"><p></p> Willkommen im Adminbereich! </div> </div> </div> </div> <div id="footer"></div> </div></div> </body> </html>
Die Fehlermeldung, die nach dem Login kommt, ist diese:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/web48/html/demo/start.php:1) in /home/www/web48/html/demo/checkuser.php on line 2
Beitrag zuletzt geändert: 25.11.2011 19:45:00 von davy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Die Seite nach dem Login soll wohl deine start.php Seite sein?
Wenn in deiner Login keine Session besteht wird eine Session gestartet und an einen header übergeben... In der Checkuser wird die Session nochmal gestartet und wieder an den header übergeben... Kannst du testweise mal das include der checkuser php aus der start.php entfernen und schauen was passiert?
Außerdem fehlt dir etwas wichtiges!
error_reporting(E_ALL)
davy schrieb:
Die Fehlermeldung, die nach dem Login kommt, ist diese:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/web48/html/demo/start.php:1) in /home/www/web48/html/demo/checkuser.php on line 2
Beitrag zuletzt geändert: 24.11.2011 21:22:05 von kill-a-teddy -
kill-a-teddy schrieb:
Die Seite nach dem Login soll wohl deine start.php Seite sein?
Wenn in deiner Login keine Session besteht wird eine Session gestartet und an einen header übergeben... In der Checkuser wird die Session nochmal gestartet und wieder an den header übergeben... Kannst du testweise mal das include der checkuser php aus der start.php entfernen und schauen was passiert?
Außerdem fehlt dir etwas wichtiges!
error_reporting(E_ALL)
davy schrieb:
Die Fehlermeldung, die nach dem Login kommt, ist diese:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/web48/html/demo/start.php:1) in /home/www/web48/html/demo/checkuser.php on line 2
Hi!
Ja, die Start.php ist die Datei, die nach dem Login kommt.
Das Error Reporting habe ich in die start.php eingefügt und das include aus der start.php entfernt, wobei diese Datei ja bewirken soll, das geprüft wird, ob eine Session da ist. -
davy schrieb:
kill-a-teddy schrieb:
Die Seite nach dem Login soll wohl deine start.php Seite sein?
Wenn in deiner Login keine Session besteht wird eine Session gestartet und an einen header übergeben... In der Checkuser wird die Session nochmal gestartet und wieder an den header übergeben... Kannst du testweise mal das include der checkuser php aus der start.php entfernen und schauen was passiert?
Außerdem fehlt dir etwas wichtiges!
error_reporting(E_ALL)
davy schrieb:
Die Fehlermeldung, die nach dem Login kommt, ist diese:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/web48/html/demo/start.php:1) in /home/www/web48/html/demo/checkuser.php on line 2
Hi!
Ja, die Start.php ist die Datei, die nach dem Login kommt.
Das Error Reporting habe ich in die start.php eingefügt und das include aus der start.php entfernt, wobei diese Datei ja bewirken soll, das geprüft wird, ob eine Session da ist.
Bekommst du denn ohne den include noch die Fehlermeldung?
// EDIT: Hab selbst schon geschaut, die Fehlermeldung ist weg... Ich mach gleich noch mal einen Edit mom...
Ändere mal<?php session_start (); if (!isset ($_SESSION["username"])) { header ("Location: index.html"); } ?>
In:
<?php session_start (); if (!isset ($_SESSION["username"])) { echo 'Falscher Benutzername oder falsches Passwort, klicke <a href="index.html"> Hier</a> um zur Startseite zurück zu kehren'; } ?>
Das sollte auch funktionieren, du kannst dann ja noch nen Timer einbauen und den Text ändern z.B. "wenn du in x sekunden nicht weitergeleitet wirst, klicke bitte hier"
Beitrag zuletzt geändert: 24.11.2011 22:08:08 von kill-a-teddy -
$sql = "SELECT ". " * ". "FROM ". "benutzerdaten ". "WHERE ". "(Nickname = '".$pass."') AND ". "(Kennwort = '".md5($_REQUEST["pwd"])."')";
Da würde ich noch bisschen was ändern. Denn so ist es ganz einfach eine MySQL-Injection durchzuführen ;)
Du musst den Nickname auf Zeichen wie z.b. ' überprüfen, diese sollten in der Eingabe des Users nicht enthalten sein. -
the-8-beta schrieb:
$sql = "SELECT ". " * ". "FROM ". "benutzerdaten ". "WHERE ". "(Nickname = '".$pass."') AND ". "(Kennwort = '".md5($_REQUEST["pwd"])."')";
Da würde ich noch bisschen was ändern. Denn so ist es ganz einfach eine MySQL-Injection durchzuführen ;)
Du musst den Nickname auf Zeichen wie z.b. ' überprüfen, diese sollten in der Eingabe des Users nicht enthalten sein.
Was kann ich denn ändern, damit mein Code sicherer wird? -
Mit mysql_real_escape_string.
-
wen du "nur" das Problem mit der session hast
würde ich mal überprüfen ob du vor dem start
der session schon einen text ausgegeben hast -
Wenn die checkuser.php in jede Seite eingebunden wird, musst du session_start() in den entsprechenden Dateien entfernen. Schließlich startest du 2x eine Session, was unnötig ist bzw. nicht gehen wird.
Im Übrigen Sessions und Header wenn Möglich immer direkt nach <?php
Beitrag zuletzt geändert: 26.11.2011 11:31:29 von fabo -
mathehefter schrieb:
wen du "nur" das Problem mit der session hast
würde ich mal überprüfen ob du vor dem start
der session schon einen text ausgegeben hast
Bei einer utf8-Codierung zählt das BOM übrigens auch als solches... Am besten als iso-8859-1 abspeichern. -
schau mal ob du nicht ; oder schreibgfehler hast sonst bin ich ratlos !
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage