session_start()

stega

Erfahrenes Mitglied
Hi, ich verzweifle gleich.
Hab jetzt hier Forensuche getätigt und die Ergebnisse alle schön befolgt, aber es hilft nix:
ich habe ein Loginscript, und Seiten, die nicht für alle zugänglich gemacht werden sollen.
diese Seiten jedoch include ich mit einer switch-Schleife. Die einzelnen geschützen Seiten haben folgenden Anfang:
PHP:
<?php
session_start ();
if (!isset($_SESSION["id"])) {
header ("Location: index.php?link=&error=session");
}
?>
und dann erst der Inhalt....jedoch werden die Seiten halt included

index.php:
PHP:
<link rel="stylesheet" href="style.css" type="text/css">
<BODY BGCOLOR=#E3FFDD LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>
<TABLE WIDTH=800 BORDER=0 CELLPADDING=0 CELLSPACING=0 align="center">
  <TR>
		<TD COLSPAN=6>
			<IMG SRC="images/index_01.gif" WIDTH=800 HEIGHT=171 ALT=""></TD>
	</TR>
	<TR>
		<TD COLSPAN=6>
			<IMG SRC="images/index_02.gif" WIDTH=800 HEIGHT=39 ALT=""></TD>
	</TR>
	<TR>
		<TD background="images/index_03.gif" width=36 valign="top"></TD>
		<TD background="images/index_04.gif" width="119" valign="top">
<? include("navi.php"); ?>
</TD>
		<TD background="images/index_05.gif" width=18 valign="top"></TD>
		<TD background="images/index_06.gif" width=12 valign="top"></TD>
		<TD background="images/index_07.gif" width="571" valign="top">
<? 
switch ($link) {
case "":
include("content.php");
break;
case "foto":
include("inc/foto.php");
break;
case "blog":
include("inc/blog.php");
break;
// da kommen noch paar mehr
}
 ?>

</TD>
		<TD background="images/index_08.gif" width=44></TD>
	</TR>

// usw

jetzt hab ich gelsen, man soll mal ob_start() und ob_end_flush() einbauen, hab ich jetzt auf der index-Seite auch geatn, wieder kein Erfolg.
Es kommt immer die Fehlermeldung :
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /usr/export/www/vhosts/funnetwork/hosting/rabioaktiv/index.php:35) in /usr/export/www/vhosts/funnetwork/hosting/rabioaktiv/inc/login.do.php on line 4

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /usr/export/www/vhosts/funnetwork/hosting/rabioaktiv/index.php:35) in /usr/export/www/vhosts/funnetwork/hosting/rabioaktiv/inc/login.do.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /usr/export/www/vhosts/funnetwork/hosting/rabioaktiv/index.php:35) in /usr/export/www/vhosts/funnetwork/hosting/rabioaktiv/inc/login.do.php on line 40

was soll ich machen? die header-info kann ich ja ent an den Anfang der index-seite stellen, dann wird die ja komplett nicht angezeigt, ich will ja aber nur, dass bestimmte seiten in der switch einfach nicht angezeigt werden dann.

hilfe, ich verzweifle fast, bei mir hat das eigentlich immer geklappt, nur ein User hats jetzt probiert und bei ihm gehts net... =(

Danke für jede Hilfe!
 
hab jetzt noch mal ein ob_start() und ein ob_end_flush direkt hinter den Anfang mit session_start(); usw. gestellt. Wenn ich jetzt die URL eingebe auf eine verbotene Seite, dann bringt er zwar den gewüsnchten error-Link als Ausgabe, gleichzeitig aber blendet er die NAvigationsleiste für Registrierte ein. Was läuft denn da bloß falsch
 
Wenn du die Seiten includest, musst du die Session nur auf der index-Seite starten. Dann sind die einzelnen Seiten, wenn man Sie direkt aufruft NOCH unbrauchbarer, funktionieren jedoch wenn du sie in deine Index-Seite einfügst! Verstanden? ;)
 
hab ich jetzt gemacht, klappt dann auch sowiet, nur bei einem einzigen Link funktioneirts nicht, sondern im Gegenteil:
wenn ich die Startseite für Eingeloggte mit der switch-Adresse aufrufe (ohne Eingeloggt zu sein), dann erscheint zwar der Error und die index-Seite wird angezeigt (soll so sein), aber gleichzeitig wird trotzdem das User-Menü angezeigt....
hier kurz der Code für Usermenü:
PHP:
<table width="100%" border="0" cellspacing="2" valign="top">
  <tr> 
    <td width="4%"><font size="2" face="Arial, Helvetica, sans-serif"><img src="images/radioaktiv.gif" width="20" height="17"></font></td>
    <td width="96%"><a href="?link=">Home</a></td>
  </tr>
  <tr> 
    <td width="4%"><font size="2" face="Arial, Helvetica, sans-serif"><img src="images/radioaktiv.gif" width="20" height="17"></font></td>
    <td width="96%"><font size="2" face="Arial, Helvetica, sans-serif"><a href="?link=stufe">Stufenliste</a></font></td>
  </tr>
// kommen noch paar weitere
</table>

<?
switch ($error) {
case "session":
print "<p><b><font color=\"red\">Nicht angemeldet!</font></b>";
break;
case "404":
print "<p><b><font color=\"red\">Seite existiert nicht!</font></b>";
break;
}
?>
//Navigationsleiste nur für Eingeloggte anzeigen
<? if (isset($_SESSION["id"])){
print "<hr>";
include ("navi.m.php");
}
?>

in der index-Seite wird jetzt session_start(); gemacht, jede Seite, die geschützt ist, hat folgenden Anfang:
PHP:
<?php
if (!isset($_SESSION["id"])) {
header ("Location:index.php?link=&error=session");
}
?>

danke für ratschläge
 
Lass dir mal $_SESSION['id'] an der Stelle ausgeben, wo das Menü für Eingeloggte User ist! Danach rufst du unangemeldet die Seite auf, auf der der Fehler ist und schaust welche ID in der Session steht!
 
er loggt mich dann als $_SESSION["id"] = 1 ein, obwohl ich gar net angemeldet bin! und Nr. 1 ist auch noch der Admin! :confused:
 
juhu, dankee, so funktioniert's! Lag einfach am Cookie....
als Dank für deine Hilfe surf ich gleich mal auf deine Links unter deinen Beiträgen ;)
 
Zurück