Probleme mit $_SESSION Registrierung?

jackie05

Erfahrenes Mitglied
Hallo,
ich habe folgendes Problem und zwar wenn sich ein User einloggt, dann soll die Session gespeichert werden.

Das ist kein Problem, folgender Code funktioniert:
PHP:
	//Einloggen
	if ($_REQUEST['act'] == "login") {
		session_register('username');
		$_SESSION["user"] = $username;

		$username=$_REQUEST['username'];
		$password=md5($_REQUEST['passwort']);
		$query = "SELECT COUNT(*) FROM users where username = '".$username."' and password = '".$password."'";
		$login = mysql_fetch_array(mysql_query($query));

		if ($login[0] > 0) {
			echo "1";
		} else {
			echo "<font color='#FF0000'>Benutzername oder Passwort falsch!</font>";
		}
	}

Aber die Sessions sollen erst gespeichert werden, wenn der User sich erfolgreich eingeloggt hat, also in Zeile 11, das Problem ist, das wenn ich die Zeile 3 und 4:
PHP:
		session_register('username');
		$_SESSION["user"] = $username;

in die if anweisung:
PHP:
if ($login[0] > 0) {
verschiebe, dann funktioniert das nicht mit der Session, also er speichert sie garnicht.
Er speichert sie nur, wenn ich die zeile 3 und 4 dort lasse, wo sie sich gerade befinden.

Weiss jemand von euch, wieso das nicht funktioniert, wenn ich Zeile 3 und 4 in diese if anweisung:
PHP:
if ($login[0] > 0) {
verschiebe?

Ich danke euch schonmal für die Hilfe.

MfG
 
Hallo,

ist ja ein seltsames Verhalten. Wird denn sonst das echo "1"; ausgegeben?
Ansonsten könnte ich mir nur vorstellen das das session_start() fehlt. Das wird auf jeder Seite wo du mit session arbeitest am Anfang benötigt.

gruss joe.
 
Danke Dir.
session_start(); befindet sich bei mir am anfang der Datei, ich hab ja nur ein Code ausschnitt von mir gepostet.
Ich hab ein Login-Script mit ajax geschrieben und wenn sich ein User einloggt, dann funktioniert es, nur wenn man die Seite wieder aktualisiert, dann ist die Session verschwunden.
echo "1" wird ausgegeben, ich hab es mit HttpFox gesnifft und gekuckt wie sich die daten verhält.
Über jquery öffne ich folgende Seite, wenn sich ein User einloggt:
Code:
function login() {
	$.get('register/register.php', {act:'login', username:document.f.username.value, passwort:document.f.passwort.value}, 
	function(data) {
		if (data == "1") {
  			$("#regform").load("register/registerform.php?login=1");
		} else {
			$('div#hs').html(data);
		}
	});
}
und das wird dann ausgeführt in der PHP:
PHP:
	include('connect.php');
	session_start();

	//Einloggen
	if ($_REQUEST['act'] == "login") {
		session_register('username');
		$_SESSION['user'] = $username;
		$username=$_REQUEST['username'];
		$password=md5($_REQUEST['passwort']);

		$query = "SELECT COUNT(*) FROM users where username = '".$username."' and password = '".$password."'";
		$login = mysql_fetch_array(mysql_query($query));

		if ($login[0] > 0) {
			echo "1";
		} else {
			echo "<font color='#FF0000'>Benutzername oder Passwort falsch!</font>";
		}
	}
ich hab gleich die Zeile bis oben mit Kopiert, hier sieht man ja, das ich session_start(); verwende.

Ich hab diesen Code von PHP mal in der Adresszeile getestet und mir ist aufgefallen, das wenn ich die SESSION an einer anderen Position verwende, z.B. ein Paar Zeilen runter, dann werden die SESSION gelöscht also die sind dann einfach nicht mehr da.
Wenn ich die SESSION an dieser Position lasse, dann werden die SESSION gespeichert, soetwas habe ich noch nicht erlebt.
Ich habe keine ahnung an was es liegen könnte.

Ich hoffe, dass mir jemand Weiterhelfen könnte

Danke schonmal.

MfG
 
Die Funktion session_register() ist veraltet und wird in keiner Weisse mehr empfohlen.
http://www.php.net/manual/de/function.session-register.php

Dabei fällt mir auf du registrierst etwas anders als du nutzen willst.
PHP:
        session_register('username');
        $_SESSION["user"] = $username;
$_SESSION["user"] müsste nun deinen $usernamen haben auch wenn du das ans Ende des scriptes setzt. Wo hingegen $_SESSION["username"] unnötig registriert wurde und dazu noch leer ist. Vieleicht daher die Probleme?
 
Danke Dir.
Irgendwie bleibt er jetzt die ganze Zeit eingeloggt, ich kann noch nicht einmal die SESSION löschen:
PHP:
	if ($_REQUEST['act'] == "logout") {
		unset($_SESSION['user']);
		echo "Ausgeloggt";
	}
Der echo befehl wird ausgeführt, aber die SESSION lässt sich garnicht löschen, kann das nicht weiter testen, wenn ich die SESSION nicht mehr gelöscht bekomm.

Woran könnte das liegen?
Edit: Es geht wieder so wie vorher, er speichert einfach nicht die Session. :rolleyes:

MfG
 
Zuletzt bearbeitet:
Um alle Session-Daten der Sitzung zu löschen, benutzt man session_destroy()

<?php
session_destroy();
?>

Dieser Befehl löscht alle Daten der Session.

Um eine einzelne Session zu deaktivieren, benötigt man unset

<?php
unset($_SESSION['user']);
?>

Dieser Befehl löscht die Werte für die Session-Variable user.
http://www.php-einfach.de/php-tutorial/php-sessions.php

Die Session selbst exitiert bei dir also noch nur das der Name nun nicht mehr drinnen ist. Je nachdem was falsch läuft kanns passieren das es direckt durch dein Script wieder gefüllt wird.
Anders gesagt es kommt drauf an wie geprüft wird ob man noch eingeloggt ist oder nicht. Oder wie dein Script weiterleitet falls die Session noch existiert.
 
Versuch mal deinen Browsercache von möglichen Cookie-Leichen zu befreien, welche verhindern könnten, dass deine Session-ID gespeichert wird.
 
Danke euch.
Der Fehler lag ganz woanders, ich prüfe ja immer ob der User eingeloggt ist:
PHP:
	if ($_REQUEST['act'] == "check_login") {
		if (!isset($_SESSION['user'])) {
			echo "0";
		} else {
			echo "1";
		}
	}

Wenn ja, dann kommt 1 zurück, wenn nein, dann die 0.
Ich hatte es vertauscht gehabt, also so:
PHP:
	if ($_REQUEST['act'] == "check_login") {
		if (!isset($_SESSION['user'])) {
			echo "1";
		} else {
			echo "0";
		}
	}
Damit ging es ja nicht, er hat dann immer 0 zurück gegeben, obwohl man eingeloggt war, deswegen ging es ja nicht, da ich ja bei den werten verschiedene Div Container lade, bei 0 = Loginformular, bei 1 = Willkommen Seite.

Jetzt funktioniert es, trotzdem, vielen Dank für die Hilfe.

MfG
 
Zurück