Sessions gehen nicht

DarkRaver

Erfahrenes Mitglied
Hallo!
Ich habe mir grade mal ein kleines Login-Script gebastelt, und es funktioniert auch mit MySQL Abfrage und so weiter.
Leider musste ich aber feststellen, dass die SESSIONS nicht gehen. Ich habe in der index.php(darüber wird alles gestartet, sprich z.B. index.php?page=blub, also alles läuft über diese Datei) ganz oben, noch vor allem anderen
PHP:
session_start();
stehen, und im Login-Script
PHP:
		if($sql_rowquery->passwort == $md5_passwort) 
		{
			$_SESSION['username'] = $username;
			$_SESSION['passwort'] = $md5_passwort;
			echo "Sie haben sich erfolgreich eingeloggt!";
		}
Damit funktioniert der Login, aber nicht die Sessions.
Wenn ich nämlich in der Logout das hier stehen habe:
PHP:
		if(isset($_SESSION["username"]))
		{
			unset($_SESSION['username']);
			unset($_SESSION['passwort']);
			session_destroy();
			echo "Sie wurden soeben erfolgreich ausgeloggt.";
		}
		else 
		{
			echo "Sie sind nicht eingeloggt, und somit können Sie sich auch nicht ausloggen.";	
		}
zeigt er mir immer die else an und nicht das obere.
Ich hoffe ihr könnt mir helfen.
Vielen dank schon einmal im voraus.

Mfg
 
Hallo DarkRaver,
vielleicht klappt es wenn du in logout.php die Session zu nächst einmal aufnimmst mit "session_start();".
mfg splater
 
Funktioniert leider nicht.
Die sessions_start(); muss doch, soweit ich weiß, vor jeder HTML ausgabe stattfinden.
Ich binde sie ja doch bereits in der index.php im main verzeichnis ein.
Hier so lade ich die Templates:

Inhalt der index.php
PHP:
session_start();
include("template/index.php");


Inhalt der template/index.php
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" encoding="UTF-8" ?>
...
	    	<div id="content">
		    	<?php if(in_array($page,$pageavaible)) { include("pages/".$page.".php"); } else { echo '<meta http-equiv="refresh" content="0; URL=index.php?page=error">'; } ?>
			</div> 
...
Somit ist es mir möglich, die dateien in /page/*.* aufzubewahren und die dann in den richtigen DIVs anzeigen zu lassen. Also rufe ich die Dateien niemals per Hand auf.
Also macht es eigentlich kein auch kein Sinn, weil ja die sessions_start(); wie gesagt am anfang vor jeder HTML ausgabe stehen muss, wenn ich das richtig verstehe. Ich lasse mich natürlich auch gern des besseren belehren ;)

Ich hoffe jemand anderes hat noch eine Lösung.

Mfg
 
Hallo,

da http ein verbindungsloses Protokoll ist, behilft man sich der Sessios, um so Informationen von der einen auf die andere Seite zu übertragen.

Dabei gibt es 2 Möglichkeiten, eine SID weiterzugeben: Über die URL und über Cookies (auf ein eigenens Sessionhandling über eine Datenbank will ich mal nicht wieter eingehen.

Falls bei Dir session.use_only_cookies eingestellt ist, müssen natürlich auch Cookies möglich sein, sonst funktioniert das Ganze nicht.

Ich kenne den Aufbau Deiner Seite nicht, aber session_start() muss nicht nur vor HTML-Code ausgeführt werden, sondern in jedem Script, dass keine Verbindung zum anderen hat (also z.B. nicht per include eingeschlossen wurde).

Bsp. Wenn Du z.B. ein separates Script aufrufst,
<a href="logout.php">logout</a>
nur um einige Sessionvariablen zu ändern, dann muss in diesem Script sehr wohl session_start() enthalten sein, auch wenn es vielleicht keinerlei Ausgabe liefert. Ansonsten hat es nämlich keinen Zugriff auf Deine Sessionvariablen.

Und die Formulierung, session_start() müsse vor HTML ausgeführt werden, würde ich dahingehen ändern, dass das ausgeführt werden muss, bevor überhaupt irgendwas an den Browser geschickt wird. Das könnten auch Headerdaten sein.... Muss also nicht zwingend was mit HTML zu tun haben.

Greet
cw
 
Hi, es gibt keine Dateien die alleine stehen. Alle sind per include eingebunden. Mehr als session_start(); am anfang und dann zum festlegen der session $_SESSION['username'] = $username; z.B. muss ja nicht sein, oder? Ich habe mich einfach mal an
http://www.php-einfach.de/tuts_mysql_login.php
gehalten und alles soweit umgesetzt.
Ich hoffe man kann mir immernoch weiterhelfen.

Mfg
 
Dann gibt' s eigentlich auch keinen Grund geben, warum's nicht funktioniert. Dann wirst Du mit der "Fehlersuche" anfangen müssen. Z.B. in jedem Script ein "echo $_SESSION['username'];" eingeben müssen, um zu gucken, wo er noch existiert und ab wann nicht mehr und da dann den Fehler weitersuchen.

Greetz
cw
 
Ok, habe den Fehler gefunden. Die Idee mit dem echo hat geklappt :D
Ich hatte beim einloggen ein problem, die Variable war leer. Vielen Dank

Mfg
 
Zurück