Problem mit Login (Session & Cookie)

kcyberbob

Erfahrenes Mitglied
Hallo zusammen,

ich hab folgendes Problem:
Ich hab eine Datei mit dem Namen index.php, eine die heißt funktions.php und eine admin.php.
So in der index ist klar was drin steht in der admin auch und in der funktions.php stehen verschiedene Funktionen drin.
Ich hoffe es ist soweit verständlich.
nun poste ich mal die einzelnen scripte damit es einfach ist zu erklären.

index.php
PHP:
require "../database.inc.php";
require "functions.php";

printheader($accountnr);

if ($action == "main" ){
   //* login formular
}

elseif ($action == 'login')
       {
            $result = mysql_query("SELECT * FROM userdata WHERE username='$username' && password='$password'");
	        	  if(mysql_num_rows($result) != 0 ) {
                       $cookie = mysql_fetch_object($result);
					   
                          $datenrichtig = true;
			              $gbook_username = $username;
						  $gbook_password = $password;
						  $gbook_accountnr = $cookie->accountnr;
                          $last_besuch = time();
                          $user_eingeloggt = true;
                    } 
                    else 
                    {
                        $datenrichtig = false;
                          $user_eingeloggt = false;
                    }
                if ($datenrichtig)
                    {
                        session_register ("user_eingeloggt","gbook_username","gbook_accountnr");
                        setcookie("user_eingeloggt", "true", time()+(3600*24*365));
                        setcookie("gbook_accountnr", "$gbook_accountnr", time()+(3600*24*365));
                        setcookie("gbook_username", "$gbook_username", time()+(3600*24*365));
                        setcookie("gbook_password", "$gbook_password", time()+(3600*24*365));

echo "richtig";
                    } 
                    else 
                       {

					   echo "daten falsch";
                    }
        }

printfooter($accountnr);

functions.php

PHP:
<?
require "../database.inc.php";

//* Control Panel

function Controlpanel ($accountnr)
{
$styles = mysql_query("SELECT * FROM gbook_options");
$style = mysql_fetch_object($styles);
$results = mysql_query("SELECT  * FROM gbook_content WHERE accountnr='$accountnr' ");
$numgbook = mysql_num_rows($results);

?>
<div id="item1" class="parent">
  <table width="700" border="0" align="<? echo "$style->table_position"; ?>" cellspacing="0" cellpadding="0" class="tableborder">
    <tr> 
      <td width="97" bgcolor="<? echo "$style->table_color"; ?>"><a href="javascript:ExpandShrink(1)">Administration</a></td>
      <td bgcolor="<? echo "$style->table_color"; ?>"> <div align="right"><strong><a href="index.php?accountnr=<? echo $accountnr; ?>&action=post">Beitrag erstellen</a></strong> |<strong> Beitr&auml;ge: <? echo $numgbook; ?> &nbsp; 
          </strong></div></td>
    </tr>
  </table>
</div>
<div id="item2" class="child">
<table id="table2" width="700" border="0" align="<? echo "$style->table_position"; ?>" cellspacing="0" cellpadding="0" class="rightleftline bottomline" >
  <tr>
    <td colspan="2" bgcolor="<? echo "$style->td_color"; ?>">
	     <?
if($_COOKIE['gbook_username']) {
?>
        <table width="97%" border="0" align="center" cellpadding="0" cellspacing="0">
          <tr> 
            <td width="15%" valign="middle"><strong><a href="admin.php?action=main&accountnr=<? echo "$accountnr"; ?>">Statusanzeige</a></strong></td>
            <td width="15%" valign="middle"><strong><a href="admin.php?action=config&accountnr=<? echo "$accountnr"; ?>">Konfiguration</a></strong></td>
            <td width="13%" valign="middle"><a href="admin.php?action=optik&accountnr=<? echo "$accountnr"; ?>"><strong>Darstellung</strong></a></td>
            <td width="35%" valign="middle"><a href="/gbook/functions.php?action=logout&accountnr=<? echo "$accountnr"; ?>"><strong>Logout</strong></a></td>
            <td width="22%" valign="middle"><div align="right"></div></td>
          </tr>
          <?
}
else {
?>
          <form action="index.php?action=login&accountnr=<? echo "$accountnr"; ?>" method="post">
            <table width="97%" border="0" align="center" cellpadding="0" cellspacing="0">
              <tr> 
                <td width="27%" rowspan="4" valign="middle">&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
              </tr>
              <tr> 
                <td width="24%"><small><strong>Username:</strong></small><br> 
                  <input name="username" type="text" class="inputtext" id="username"></td>
                <td width="49%"><small><strong>Passwort:</strong></small><br> 
                  <input name="password" type="password" class="inputtext" id="password"></td>
              </tr>
              <tr> 
                <td>&nbsp;</td>
                <td>&nbsp;</td>
              </tr>
              <tr> 
                <td><div align="right"> 
                    <input type="submit" name="Submit" value="Login" class="inputbutton">
                  </div></td>
                <td>&nbsp;</td>
              </tr>
            </table>
          </form>
          <?
}
?>
        </table>
	</td>
  </tr>
  </table>
</div>
<br>
<?
}


//* Jumpto der Seite (Weiterleitung)

function Jumpto($url)
{
	echo "<script type=\"text/javascript\">document.location.href=\"$url\"</script>";
}


//* Counter der Seite

function HitsCounter($accountnr)
{

$abfrage = "SELECT  * FROM gbook_options WHERE accountnr='$accountnr' LIMIT 1 ";
  $ergebnis = mysql_query($abfrage);
  while($inputtyle = mysql_fetch_object($ergebnis))
    {
	if ($inputtyle->site_hits == "")
		$inputtyle->site_hits = 0;
	$hit = $inputtyle->site_hits + 1;
	}
	mysql_query("update gbook_options set site_hits = '$hit'");

}


//* Smilie funktion
	
function Smilies (&$mypost) {

    $mypost = preg_replace("/\:smile\:/", "<img src=\"../images/smilies/smile.gif\" />", $mypost);
    $mypost = preg_replace("/\:smiled\:/", "<img src=\"../images/smilies/smiled.gif\" />", $mypost);
    $mypost = preg_replace("/\:smileo\:/", "<img src=\"../images/smilies/smileo.gif\" />", $mypost);
    $mypost = preg_replace("/\:smilep\:/", "<img src=\"../images/smilies/smilep.gif\" />", $mypost);
    $mypost = preg_replace("/\:surprised\:/", "<img src=\"../images/smilies/surprised.gif\" />", $mypost);
    $mypost = preg_replace("/\:teeth\:/", "<img src=\"../images/smilies/teeth.gif\" />", $mypost);
    $mypost = preg_replace("/\:wink\:/", "<img src=\"../images/smilies/wink.gif\" />", $mypost);
    $mypost = preg_replace("/\:angel\:/", "<img src=\"../images/smilies/angel.gif\" />", $mypost);
    $mypost = preg_replace("/\:angry\:/", "<img src=\"../images/smilies/angry.gif\" />", $mypost);
    $mypost = preg_replace("/\:crook\:/", "<img src=\"../images/smilies/crook.gif\" />", $mypost);
    $mypost = preg_replace("/\:cry\:/", "<img src=\"../images/smilies/cry.gif\" />", $mypost);
    $mypost = preg_replace("/\:embaressed\:/", "<img src=\"../images/smilies/embaressed.gif\" />", $mypost);
    $mypost = preg_replace("/\:sad\:/", "<img src=\"../images/smilies/sad.gif\" />", $mypost);

	
return $mypost;
}	


//* Header der Seite

function Printheader($accountnr) {
  $ergebnis = mysql_query("SELECT  * FROM gbook_options WHERE accountnr='$accountnr' LIMIT 1");
  $inputtyle = mysql_fetch_object($ergebnis)

?>
<html>
<head>
<title>seite.de der kostenlose Service für Webmaster</title>
<link rel="stylesheet" href="style.css.php?accountnr=<? echo "$accountnr"; ?>" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript" src="../menu.js"></script>
<script language="JavaScript" src="functions.js"></script>

</head>
<body>
<?
echo "$inputtyle->headeroben";
}



 //* Footer der Seiten.

function Printfooter($accountnr) {
  $ergebnis = mysql_query("SELECT  * FROM gbook_options WHERE accountnr='$accountnr' LIMIT 1 ");
  $inputtyle = mysql_fetch_object($ergebnis)

?>
<div align="center"><br>
<? echo "$inputtyle->headerunten"; ?>
  <table width="50%" border="0" cellspacing="0" cellpadding="0">
    <tr> 
      <td><div align="center"><strong><small><a href="http://www.seite.de/index.php?section=services/guestbook.htm" target="_blank">gbook</a>™ 
          Version 1.0 </small></strong></div></td>
    </tr>
    <tr> 
      <td><div align="center"><strong><small>&copy;copyright by&nbsp;<a href="http://www.seite.de/">seite.de</a></small></strong></div></td>
    </tr>
  </table>
</div>
<br>
</body>
</html>
<?
}
?>

nun die admin.php

PHP:
require "../database.inc.php";
require "functions.php";

if ((@$_COOKIE["gbook_username"]) AND (@$_COOKIE["gbook_password"])) {
    session_register ("user_eingeloggt","gbook_username","gbook_accountnr","gbook_password");
    $_SESSION["gbook_password"] = $_COOKIE["gbook_password"];
    $_SESSION["gbook_username"] = $_COOKIE["gbook_username"];
    $_SESSION["gbook_accountnr"] = $_COOKIE["gbook_accountnr"];
    $_SESSION["user_eingeloggt"] = $_COOKIE["user_eingeloggt"];
    }
	
	
if ((session_is_registered("user_eingeloggt")) AND ($user_eingeloggt) AND ($accountnr == $gbook_accountnr) )
    {
                    
// CONTENT HIER ....
echo "hallo";

} else { 
//* fehlermeldung
}

So.
Und wenn ich mich jetzt einloggen will, dann kommt folgende fehlermeldung.
PHP:
Warning: Cannot send session cookie - headers already sent by (output started at c:\apache\htdocs\gbook\functions.php:139) in c:\apache\htdocs\gbook\login.php on line 23

Warning: Cannot send session cache limiter - headers already sent (output started at c:\apache\htdocs\gbook\functions.php:139) in c:\apache\htdocs\gbook\login.php on line 23

Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\gbook\functions.php:139) in c:\apache\htdocs\gbook\login.php on line 24

Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\gbook\functions.php:139) in c:\apache\htdocs\gbook\login.php on line 25

Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\gbook\functions.php:139) in c:\apache\htdocs\gbook\login.php on line 26

Warning: Cannot add header information - headers already sent by (output started at c:\apache\htdocs\gbook\functions.php:139) in c:\apache\htdocs\gbook\login.php on line 27
richtig

An was kann das ganze liegen?
Ich hab schon alles versucht aber ich weiß nicht woran der fehler liegt.
Bitte helft mir weiter oder gebt mir einen kleinen Denkanstoß.

Gruß kcyberbob
 
Headers

Hi,

Dieser Fehler erscheint ziemlich sicher wegen der Ausgabe die du am Anfang des Skriptes (login.php) machst. Entferne also alle Ausgaben, sprich echo und print Befehle in deinem Login Script. Mach die Ausgaben in einer anderen Datei.

greets
Roger
 
Ganz einfach:
Sämtliche session_ Befehle (da sie Header senden) und auch header() Befehle
gehören grundsätzlich vor jegliche Ausgabe. Ein Suchen im Board nach
headers already sent hätte dir sicherlich weitergeholfen.

Bleibt mir nur noch zu sagen, kürze bitte den von dir geposteten Quelltext auf ein
eträgliches Maß, nämlich einmal die Fehlermeldung ohne die output Erklärung
in den Klammern.
So ist das Problem genausogut verständlich und das Forenlayout wird in der Breite nicht gesprengt.
Danke
 
Zurück