Warning: session_start(): Cannot send ...

creativeheadz

Erfahrenes Mitglied
Guten morgen oder auch Mittag , wie auch immer,

ich habe 2 Probleme.
Das erste lautetet wie folgt:

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /htdocs/tcm/index.php:12) in /htdocs/tcm/include/geheim.php on line 2

Dies erscheint immer wenn ich in meinem geschütten Bereich bin allerdings werden keine Zeilen umbrüche oder Leerzeichen mitgesendet. woran liegt es sonst noch weiss das jemand?

Mein zweites Problem ist, wenn man in meinem Einlog-Formular irgendein Schwachsinn eingibt und das Passwort feld frei lässt und dann auf login klickt, kommt man in den geschützen Bereich das ist voll seltsam woran könnte sowas liegen.?

Gruß
creativeheadz
 
login formular:
PHP:
<form action="index.php?segment=log" method="post">
  <table width="100%" border="0" cellspacing="5" cellpadding="0">
    <tr> 
      <td width="25%"> <div align="right"><font size="2" face="Arial, Helvetica, sans-serif">E-Mail</font></div></td>
      <td width="75%"><input name="username" type="text" size="33"></td>
    </tr>
    <tr> 
      <td width="25%"> <div align="right"><font size="2" face="Arial, Helvetica, sans-serif">Passwort:</font></div></td>
      <td><input name="password" type="password" size="33"></td>
    </tr>
    <tr> 
      <td width="25%">&nbsp;</td>
      <td><input type="submit" name="Submit" value="Login"></td>
    </tr>
  </table>
</form>

-------------------------------------------------------------------

log.php
PHP:
<?php
$verbindung = mysql_connect("localhost", "" , "")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");

mysql_select_db("") or die ("Datenbank konnte nicht ausgewählt werden");

$username = $_POST["username"];
$password = $_POST["password"];

$abfrage = "SELECT username, password FROM shop_kunden WHERE username LIKE '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

if($row->password == $password)
    {
    $_SESSION["username"] = $username;
    echo "Login erfolgreich. <br> <a href=\"index.php?segment=geheim\">Geschützer Bereich</a>";
    }
else
    {
    echo "Benutzername und/oder Passwort waren falsch. <a href=\"index.php?segment=login\">Login</a>";
    }

?>

---------------------------------------

geheim.php

PHP:
<?php
session_start();
?>

<?php
if(!isset($_SESSION["username"]))
   {
   echo "Bitte erst <a href=\"index.php?segment=login\">einloggen";
   exit;
   }
?>
 
Hi,

dass der Login mit leerem Passwort funktioniert liegt an der folgenden Zeile:

$row->password == $password

Wenn Du das nicht willst, ersetzt Sie doch einfach dadurch:

if($row && $row->password == $password && trim($password)!='')

Kann es sein, dass Du in Deiner Session noch einen Usernamen gesetzt hast?
mysql_Fetch_object gibt nämlich bei einem leeren Resultset false zurück.

Zu Problem 1:
Schau doch mal nach, was Deine index.php in Zeile 12 macht. Da geschieht mit Sicherheit eine Ausgabe.
Dieser Code ist z.B. auch schon eine:
?>
<?
Nämlich das "\n"

Hoffe geholfen zu haben...
 
Zu 1: Diese Meldung bedeutet dass du bereits HTML-Header versendet hast bevor du deine Session gestartet hast. Am besten immer session_start(); als aller erstes setzen.
<?php
session_start();
?>
<html>
<head>
</head>
<body>
...
</body>
</html>
 
Zurück