session_start macht plötzlich Probleme + Session geht verloren

stega

Erfahrenes Mitglied
Hi,

ich verzweifle grad an diesen doofen (und doch so brauchbaren) Sessions in php.
Ich hatte eine funktionierende HP, die mir gehackt und zerstört wurde. Jetzt hab ich sie wieder auf Vordermann gebracht - mit Sicherheitsaspekten, die ich vorher nicht hatte.

Nur will jetzt plötzlich mein session_start(); nicht mehr.

Folgende Situation:
Ich kann mich als admin einloggen mit einem Formular und wenn ich in der Datenbank vorhanden bin, dann zeigt er mir den Admin-Bereich an.

Das Login-Verarbeitungsskript sieht u.a. so aus:
PHP:
<?
ob_start();

session_start(); 

session_unset(login);
session_unset(user);
session_unset(id);
session_unset(login_nr);
session_unset(last_login); 

include("../inc.php");

[.....]

 header("location:index.php");

ob_end_flush();?>

So, hier wird auch richtigerweise eine $_SESSION["login"] erzeugt. Hab ich mir anzeigen lassen.
Dann kommt eben die index.php ausm Admin-Bereich, die aufgerufen wird und die sieht dann so aus am Anfang:

PHP:
<?
ob_start();
session_start();
session_register(login);

if (!isset($_SESSION["login"]))
 {
  print "<font class=\"f_text\">Not allowed!</font><br>
      <a href=\"../admin_login.php?id=0\">Go back</a>";
  exit;
 }

[....]

ob_end_flush();

[.....]

danach wird ein template aufgerufen und die Daten, die hier im Skirpt erzeugt werden angezeigt. Hatte bisher immer funktioniert, bis er mir jetzt dauernd den Fehler zeigt:

Code:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at ....\admin\index.php:1) in ....\admin\index.php on line 4

Und egal, wasich tue - er kommt entweder immer wieder hervor - oder das System zeigt mir (trotz richtigem Passwort und Username) "Not allowed".

Die $_SESSION["login"]-Variable wird auch nicht im "index.php" angezeigt - sie verschwindet irgendwo im Nirvana zwischen login.php (s.o.) und index.php (das untere).

Wo liegt denn jetzt der Fehler?

Vielen dank für die Hilfe - ich verzweifle grad an diesem session-Gedönse!

liebe Grüße
 
Also laut der fehlermeldung gibt es meiner meinung nach in zeile 1 also in der funktion "ob_session()" eine Ausgabe. Es darf nichts vor der Session ausgegeben werden. Prüf das mal bitte, oder poste die Funktion "ob_session()".
 
ob_session() ? das hab ich ja gar net? oder meinst du session_start() ?

also das Ganze sieht so aus:
ich habe das login-Formular in einer Template-Datei generiert und anzeigen lassen --> das schickt mir die Daten an login.php , dort steht dann
PHP:
session_start();
(s.o.) --> wenn alles klappt wird via
PHP:
header(location.....)
auf die index.php des Admin-Bereiches weitergeleitet --> diese index.php (der untere Skriptauszug) prüft eben, ob die Session ordnungsgemäßig gesetzt wurde (damit man nicht einfach via URL die index-Datei aufrufen kann ohne sich anzumelden) und erzeugt _danach_ dann die Ausgabe mit dem Template.

Und wo liegt jetzt der neu aufgekommene Fehler? ;)
 
Vor dem Aufruf von ob_start() wird bereits etwas ausgegeben, und seien es nur Leer- oder Zeilenumbruchzeichen. Die müssen weg.
 
Oh tut mir leid stega, hab mich mit dem funktionsnamen vertan, ich meinte ob_start.
 
ok, hab die weggemacht - da war ein Leerzeichen vor dem <? für php.... oke - aber jetzt ist die
PHP:
$_SESSION["login"]
noch immer bei der index.php weg und lässt sich nicht ausgeben.... sprich, es kommt auch immer das "Not Allowed" dann.

Wisst ihr da noch Rat, wohin die verschwunden sein kann?

danke für eure Hilfe!
 
es könnte daran liegen dass du session_register("login") schreiben musst, also das login als String.
 
Vergiss mal session_register() und session_unregister() und arbeite lieber direkt mit der $_SESSION-Variable:
PHP:
// statt session_register('foobar');
$_SESSION['foobar'] = 'bla';
// statt session_unregister('foobar');
unset($_SESSION['foobar']);
 
juhu - es funktioniert wieder :)

hab das session_register rausgemacht und jetzt klappts einfach mal so!

danke für eure Hilfe - ist super, wie schnell das hier geht, nachdem ich das ganze Wochenende daran verzweifelt bin. Wieder was gelernt. Keine Leerzeichen vor ob_start() und kein register verwenden ;)

liebe grüße + schönen abend euch!
 
Zurück