• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

php-login mit sessions und include

kullerkeks

New member
Hallo @all,

ich weiß, dieses Thema gibts schon tausendfach im Netz und ich weiß auch so ziemlich genau, worin die Ursache meines Problems liegt. Ich würde nur gerne wissen, ob es irgendeine Möglichkeit gibt, wie ich meine bestehende Architektur trotzdem nutzen kann. Aber zuerst zum Problem:

ich habe eine Seite index.php die das gesamte Layout inklusive Navi enthält und in der mittels include die Content-Seiten eingebunden werden. Nun möchte ich einen Login-Bereich integrieren. Das Login wollte ich mit sessions realisieren. Sobald ich die login-Seite aber aufrufe, kommt die Fehlermeldung, dass in index.php bereits etwas gesendet wurde. Ich weiß, dass session_start als erstes stehen muss und klar ist auch, dass natürlich bereits etwas gesendet wurde, da ja auch die login-Datei mittels include in index.php eingebunden wurde. Mir ist nur völlig unklar, wie ich das lösen soll? Denn ich kann ja nicht session_start bereits in index.php aufrufen...

ich hoffe, irgendjemand kann mir da weiterhelfen...
muss ja irgendwie gehen, oder?

Grüße,
Sara

und hier die beiden codes:

index.php
Code:
<html>
<head>...</head>
<body>
	<div id="header"><img src="images/header.png"></div>
	<div id="naviTop">
		<ul id="naviRight">
			<li><a class="menu" href="index.php?go=form" alt="Interner Bereich">LogIn</a></li>
			<li><a class="menu" href="index.php?go=kontakt" alt="Wie Sie uns am Besten erreichen">Kontakt</a></li>
			<li><a class="menu" href="index.php?go=home" alt="Startseite">Home</a></li>
		</ul>
	</div>
	<div id="mainContentWrapper">
		<div id="mainContent">
			<!-- include content pages -->
			<?php
				#check if url-parameter exists
			    if (isset($_GET['go']))
			    {
					#get page string & include page
					$tmp = $_GET['go'].'html';
					include($tmp);
			    }
			    else
			    {
			        include('home.html');
			    }
			?>
		</div>
		<div id="enclose"></div>
	</div>
	<div id="footer">2009 | <a href="http://www.serendipitynet.de/" alt="Layout & Design by Serendipity">Serendipity</a></div>
</body>
</html>

form.php
Code:
<?php 
	session_start (); 

	#check for invalid entry
	if (isset ($_REQUEST["fehler"])) 
	{ 
	  echo "Die Zugangsdaten waren ungültig."; 
	} 
?>
<div>
	<h1>LogIn zum internen Bereich</h1>
	<form action="login.php" method="post"> 
		<div class="formText">Name:</div><input class="form" type="text" name="name" size="20"><br> 
		<div class="formText">Kennwort:</div><input class="form" type="password" name="pwd" size="20"><br> 
		<input id="btn" type="submit" value="Login">
	</form>
</div>
 
Moin,

warum kannst du session_start bitte nicht in die index mit einbauen?
Die Session ist dann erstmal leer.
Aber du musst das eh auf jede Seite setzen wo du was schreibst und es muss als erstes
stehen.
Da der Inhalt der Include-Seite aber in deine Index eingebunden wird, greifst du auf die in der index gestartete Session zurück.
 
PHP:
if (isset($_GET['go']))
			    {
					#get page string & include page
					$tmp = $_GET['go'].'html';
					include($tmp);
			    }

Du solltest überprüfen was in $_GET['go'] steht, sonst kann dir da jemand Code einschleusen. Mindestens sicherstellen, dass die Seite bei dir auf dem Server liegt, besser aber noch, definieren welche Seiten überhaupt eingebunden werden dürfen.
 
Hallo ihr zwei,

erstmal vielen Dank für die Posts.
@ToM80: darüber hatte ich eben auch schon nachgedacht. nun ist es aber so, dass das login auf der seite für nur eine sehr geringe Anzahl von Leuten gedacht ist (max 5) und das login daher sehr selten genutzt werden wird (aber trotzdem nötig ist). Trotzdem würde jedes Mal, wenn ein "normaler" besucher die seite aufruft, eine neue session gestartet - obwohl diese in vll. 5% aller fälle überhaupt genutzt wird.
Von daher habe ich etwas Bedenken, das ganze bereits auf der index-seite zu starten...das muss doch auch anders gehen, oder?

@ZeitGeist: Danke für den Hinweis - auf den security-aspekt habe ich bisher weniger geachtet. ich werd mir da mal Gedanken machen...
 
Die Session musst du am Ende eh auf deiner Seite einbauen, weil sonst geht sie wieder verloren.
 
Sorry, so ganz versteh ich deinen letzten post nicht. ich muss doch die session nicht zwangsläufig auf der index-seite einbauen? ich brauche sie doch nur im internen bereich (also nur eine handvoll seiten, die außerhalb des logins nicht erreichbar sind)...

oder versteh ich da was falsch?

Grüße,
Sara
 
Nein, da hast du recht.

Entweder baust du für deinen internen Bereich eine andere index.php in der du dann die Session startest oder du änderst den Aufbau deiner Seite grundlegend.

Ich verstehe den Vorteil dieser "Verteiler-Seiten" sowieso nicht. Man erhält hässliche Links die in der Regel keine Ausagekraft haben (index.php?site=213) und die index.php bläht sich in der Regel auf. Ich löse das so, dass ich die Elemente die ich auf jeder Seite brauche auslagere und dann auf den jeweiligen Seiten einbinde. Dadurch habe ich eine höhere Flexibilität (könnte zum Beispiel den Header auf einer Seite ändern, oder wie in deinem Fall, Sessions nur auf bestimmten Seiten aktivieren), erhalte keine riesige index.php und habe dazu noch schönere Links (index.php, guestbook.php, etc)
 
Ich verstehe den Vorteil dieser "Verteiler-Seiten" sowieso nicht. Man erhält hässliche Links die in der Regel keine Ausagekraft haben (index.php?site=213) und die index.php bläht sich in der Regel auf. Ich löse das so, dass ich die Elemente die ich auf jeder Seite brauche auslagere und dann auf den jeweiligen Seiten einbinde. Dadurch habe ich eine höhere Flexibilität (könnte zum Beispiel den Header auf einer Seite ändern, oder wie in deinem Fall, Sessions nur auf bestimmten Seiten aktivieren), erhalte keine riesige index.php und habe dazu noch schönere Links (index.php, guestbook.php, etc)

Bei den meisten merkst du sowas garnicht wegen .htaccess (modRewrite).
 
Super - Danke ZeitGeist, werde über deine Variante mal nachdenken. vielleicht lässt sich das ohne viel Auwand sogar bei mir umsetzen, mal sehen.

Thx @all!
 
Zurück
Oben