Login&Sessions
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufruf
ausgabe
befehl
beitrag
datei
fehler
formular
hinweis
limit
login
pawort
result
send
session
set
stehen
update
user
verschachtelt hast
zeile
-
Hallo!
Hoffe ihr k?nnt mir mal wieder helfen
Und zwar habe ich ein Problem mit meinem Login!
Ich habe ein kleines Login-Script geschrieben und nun wollte ich die login.php includen. Das habe ich auch allerdings kommt dann folgende Fehlermeldung beim aufrufen:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/www/web11/html/xero/index.php:6) in /home/www/web11/html/xero/login.php on line 3
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/www/web11/html/xero/index.php:6) in /home/www/web11/html/xero/login.php on line 3
Darunter wird das Login Formular angezeigt.
Hier einmal der quelltext der login.php zur Veranschaulichung:
<?
session_start();
include("sessions.inc.php");
if(isset($_POST['login'])) {
$id = check_user($_POST['nick'], $_POST['passwort']);
if($id != false) {
login($id);
}
else {
echo 'Die eingegebenen Daten sind nicht korrekt!';
}
}
else if(!logged_in()) {
echo '<form method="post" action="login.php">';
echo '<table width="100%">';
echo '<tr><td>Nickname:</td><td><input name="nick" type="text"></td></tr>';
echo '<tr><td>Passwort:</td><td><input name="passwort" type="password" id="passwort"></td></tr>';
echo '<tr><td colspan="2"><input name="login" type="submit" id="login" value="Einloggen"></td>';
echo '</table>';
echo '</form>';
}
else {
echo 'Sie haben sich erfolgreich eingeloggt!';
}
?>
Hoffe ihr findet das Problem. Ich n?mlich nicht
mfg
jacer
EDIT: Nur nochmal als Hinweis. Der Fehler kommt nur beim includen der login.php und nicht wenn ich diese normal ?ffne!
Beitrag ge?ndert am 25.01.2006 12:28 von jacer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich sch?tze mal das in der "sessions.inc.php" auch "session_start();" steht oder?
Setz einfach nochmal
ob_start();
ganz an den Anfang. -
Hier der Quellcode der sessions.inc.php
<?
function connect () {
include("config.inc.php");
}
function check_user($nick, $passwort) {
$sql = "SELECT `id` FROM `users` WHERE nick='" .$nick. "' AND passwort=MD5('" .$passwort. "') LIMIT 1";
$result = mysql_query($sql) or DIE("Ein Verbindungsfehler mit der Datenbank ist aufgetreteten! Bitte kontaktieren sie beim häufigeren Auftreten einen Webmaster/Admin!");
if(mysql_num_rows($result)==1) {
$user = mysql_fetch_assoc($result);
return $user['id'];
}
else {
return false;
}
}
function login($id) {
$sql = "UPDATE `users` SET session='" .session_id(). "' WHERE id='" .$id. "'";
mysql_query($sql);
}
function logged_in() {
$sql = "SELECT `id` FROM `users` WHERE session='" .session_id(). "' LIMIT 1";
$result = mysql_query($sql);
return (mysql_num_rows($result)==1);
}
function logout() {
$sql = "UPDATE `users` SET session=NULL WHERE session='" .session_id()."'";
mysql_query($sql);
}
connect();
?>
-
Hi Jens,
nimm einfach das session_start() raus, da du
wahrscheinlich zweimal eine session gestartet hast.
Denn mit include() bleibt ist die session aus der vorigen datei immer noch aktiv!
Mfg kingalex -
Ich starte aber weder in der index.php noch irgendwo anders vorher eine session
PS: Wieso "hi Jens" ??
EDIT: Durch das entfernen von session_start() funktioniert es jetzt! Obwohl ich das nicht so ganz verstehe da ich ja sonst nirgendwo eine session starte
Beitrag ge?ndert am 25.01.2006 12:51 von jacer -
sorry, ich meinte nat?rlich "hi jacer" !
so, jetzt wei? ich wo der fehler liegt!!!
Der Fehler kommt daher Zustande, weil vor session_start() bereits eine Ausgabe (header) an den Browser gesendet wurde.
im klartext: du hast in irgendeiner datei wo du
include("login.php"); stehen hast vor diesem include
eine ausgabe an den browser gesendet
z.B: in html: <br><div>Hier der Fehler </div>
oder in php: echo $string; //Hier der Fehler
ABER: bevor man eine session startet darf keine ausgabe stehen und das include() ist nur eine einsetzung in die vorherige datei, geh?rt also zu dieser dazu!
Abhilfe: Du musst das session_start() VOR dem ersten browser-ausgabebefehl in der vorherigen datei setzen, wenn du mit include() arbeitest!
Alternative: Du nimmst kein include(), sondern einen
hyperlink: <a href=\"login.php\">Login</a>
oder einen
formular post aufruf: <form method="POST" action="login.php">
Mfg kingalex -
Ja vielen Dank das war das Problem!
Nun habe ich aber erneut eine Schwierigkeit
Ich habe jetzt mit dem session_start() auch das include der sessions.inc.php mit in die index.php gesetzt. Und zwar weil ich zB eine Hyperlink nur anzeigen will wenn jemand eingeloggt ist. Also pr?fe ich dann ja zun?chst mit
if(logged_in()) { echo "HYPERLINK"; }
ob jemand eingeloggt ist. Wenn ich dann aber die includete login.php ?ffne scheint er die sessions.inc.php nicht mehr anzunehmen, da er den Befehl check_user() mit folgender Fehlermeldung benennt:
Fatal error: Call to undefined function: check_user() in /home/www/web11/html/xero/login.php on line 4
Diese Zeile 4 der Fehlermeldung sieht folgenderma?en aus:
$id = check_user($_POST['nick'], $_POST['passwort']);
Den Zusammenhang erkennt ihr ja aus dem gesamten Quellcode der login.php in meinem ersten Post! -
poste doch mal bitte, wie du die includes verschachtelt hast!
Das include("login.php") muss nat?rlich vor die Zeile
if(logged_in()) { echo "HYPERLINK"; }
Beitrag ge?ndert am 25.01.2006 15:29 von kingalex -
Ja das ist zwar ein weiterer Fehler (danke f?r den Hinweis) aber der l?st nicht dass von mir angesprochene Problem!
Trotz dass ich die sessions.inc.php in der index.php includet habe und die login.php ebenfalls erkennt er dies nicht. Wenn ich mich also einloggen will erkennt er den Befehl check_user() nicht, welcher in der sessions.inc.php definiert wurde!
EDIT:
poste doch mal bitte, wie du die includes verschachtelt hast!
Das include("login.php") muss nat?rlich vor die Zeile
if(logged_in()) { echo "HYPERLINK"; }
Warum sollte es dass? Dass ist doch v?llig egal. Wenn ?berhaupt musst das include("sessions.inc.php") vor das if(logged_in()) {} da ja in der sessions.inc.php die Befehle logged_in() etc definiert sind und nicht in der login.php!
Beitrag ge?ndert am 25.01.2006 15:34 von jacer -
Bitte nicht als Spam ansehen wenn ich einen DoppelPost mache aber ich bin jetzt drauf gekommen woran das Problem liegt und ich wollte nur nochmal pushen
Also ich habe meine Seite ja so aufgebaut:
$seite = $_GET['index'];
<a href="?index=login">Einloggen</a>
if($seite == "login") { include("login.php"); }
In der login.php wird das Formular mit einem input Feld abgeschickt welchs sich aber wieder extern ?ffnet beim draufklicken. So dachte ich mir dass dann das includ der session.inc.php nicht mehr wirksam ist in dem Bereich. Wie erstelle ich also eine if-Abfrage f?r ein inout Feld, wie ich es mit dem Link oben f?r den Login gemacht habe um das ganze mit GET zu ?bergeben?
EDIT: Jo hat sich dann auch erledigt. Vielen Dank f?r eure Hilfe!
Beitrag ge?ndert am 25.01.2006 17:15 von jacer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage