Frage zu Sessions

illuminatus26

Erfahrenes Mitglied
Hallo zusammen.

Hätte da mal ne allgemeine Frage zu Sessions.
Habe ein ganz simples Loginskript geschrieben, welches die Daten aus dem Formular mit den Daten aus der Datenbank abgleicht und dann eine NutzerID in der Session speichert.
Diese ist dann dafür da, um zu prüfen, ob die Berechtigung für den gewünschten Inhalt vorhanden ist.
Bei mehreren Nutzern (mir selber auch) gibt es keine Probleme.
2 Nutzer berichten mir davon, dass sie sich einloggen, den Begrüssungstext angezeigt bekommen, und sekunden später wieder raus sind.
Woran könnte sowas liegen und was kann man dagegen machen?
Dachte immer, das die Session immer Gültigkeit besitzt, so lange die Seite geöffnet ist.
Besten Dank im vorraus....
 
login.php

PHP:
<?php 

// Prüfung ob Formular gesendet wurde
if (isset($_POST['sentlogin'])) {

	// Prüfung ob ein Anmeldename eingegeben wurde
	if (empty($_POST['anmeldename'])) {

		$meldung .= "<br>Es wurde kein Anmeldename eingegeben.";
		unset ($_POST['sentlogin']);
	}

	else {

		$meldung .= "";
	}
	
	// Prüfung ob ein Passwort eingegeben wurde
	if (empty($_POST['passwort'])) {

		$meldung .= "<br>Es wurde kein Passwort eingegeben.";
		unset ($_POST['sentlogin']);
	}

	else {

		$meldung .= "";
	}
	
	// Prüfung ob Anmeldename und Passwort eingegeben wurden
	if ((!empty($_POST['anmeldename'])) && (!empty($_POST['passwort']))) {
	 
		include ("login/test_login.php");
		
		test_nutzer();
	}
		
} //Ende (isset($_POST['sent']))

// Prüfung ob noch nicht abgesendet wurde
if (!isset($_POST['sentlogin'])) {

	// Prüfung ob Meldungen vorhanden sind
	if (!empty($meldung)) {

		echo $meldung;
	}

?>

<form action="index.php?menu=login" method="post">

	<input name="sentlogin" type="hidden" value="1" />
	name:<input name="anmeldename" type="text" value="<?php echo $_POST['anmeldename']; ?>" />
	passwort:<input name="passwort" type="password" value="<?php echo $_POST['passwort']; ?>" />
	<input name="einloggen" type="submit" value="login" />

</form>

<?php 

}// Ende (!isset($_POST['sentlogin'])

?>


eingeloggt.php


PHP:
<?php

if(isset($_POST['logout'])) {
    echo '<meta http-equiv="refresh" content="3"; url="index.php">';
}

if (isset($_POST['logout'])) {

	echo "Auf Wiedersehen ".$_SESSION['anmeldename'].".<br>Hoffentlich sehen wir uns bald wieder.";
	
	
	session_unset();
	session_destroy();
	
}

else {

echo "<br>Hallo ".$_SESSION['anmeldename'];
echo "<br>du bist eingeloggt";

?>

<html>
<body>

<form action="index.php?menu=login" method="post">
<input name="logout" type="hidden" value="1" />
<input name="logout" type="submit" value="logout" />
</form>

</body>
</html>

<?php 

} // Ende else (isset($_POST['sent'])

?>


test_login.php

PHP:
<?php 


include("datenbank/funktion_datenbankverbindung.php");
include("login/funktion_abfrage_login_auswerten.php");


function test_nutzer () {

	global $meldung;

	include("login/abfrage_nutzer_vorhanden.php");


	$result = datenbankverbindung ($sql);

	abfrage_login_auswerten($result);

	if (isset($_SESSION['anmeldename'])) {
		
		$meldung .= "Der Anmeldename lautet ".$_SESSION['anmeldename']."<br>und ist in Ordnung ";
		test_passwort ();
	}


	else {

		$meldung .= "<br>Es gibt keinen Nutzer: ".$_POST['anmeldename']."in unserer DB ";
		
		unset ($_POST['sent']);

		return $meldung;
	}

} // Ende function nutzer_vorhanden

function test_passwort () {

	global $meldung;

	include("login/abfrage_login.php");
	
	
	$result = datenbankverbindung($sql);

	abfrage_login_auswerten($result);
	

	if (($_POST['anmeldename'] == $_SESSION['anmeldename']) && (sha1($_POST['passwort']) == $_SESSION['passwort'])) {
			
		$_SESSION['nutzerid'] = $_SESSION['id'];
		
		$meldung .= "Login erfolgreich"; 
		include("login/eingeloggt.php");
	}


	else {
		
		if (sha1($_POST['passwort']) == $_SESSION['passwort']) {
		
		}
		
		else {
		
			$meldung .= "<br>Das eingegebene Passwort stimmt leider nicht.";
			
			unset ($_POST['sent']);
			
			return $meldung;
		}
			
	} // Ende else (($_POST['anmeldename'] == $_SESSION['anmeldename']) && ($_POST['passwort'] == $_SESSION['passwort']))

} // Ende function datenabgleich

?>
 
Zuletzt bearbeitet:
Werden sie ausgeloggt ohne etwas zu machen (also z.B. einen Link angeklickt zu haben... nein, nicht den Logout-Link :))? Oder werden sie direkt weitergeleitet... Also sehen die Meldung und dann per meta-refresh 'rausgeworfen'? Trifft ersteres zu, musst du an jeden Link jeweils folgende Konstante (SID) anhängen:
PHP:
echo '<a href="seite.php?'.SID.'">Link</a>';
// äquivalent zu
echo '<a href="seite.php?'.session_name().'='.session_id().'">Link</a>';
 
Zuletzt bearbeitet:
Komisch, ich kann jetzt kein Fehler entdecken... Die einzige Stelle wo ein meta-refresh bei dir vorkommt ist ja:
PHP:
if(isset($_POST['logout'])) {
    echo '<meta http-equiv="refresh" content="3"; url="index.php">';
}
Aber das scheint mir richtig zu sein...
 
Yep.
Das Prob ist ja auch, dass es nur bei 2 Nutzern so ist. Alle anderen, haben keine Probs.
Nutzen beide den I-Explorer.
Kann das ne Einstellungssache sein
 
Kann sein, was mich wundert ist, dass sie automatisch weitergeleitet werden, obwohl dazu ja die $_POST-Variable logout gesetzt sein müsste. Ist das denn das ganze Script? Oder hast du was rausgelöscht?
 
Nee nix gelöscht.
Die Sachen die in den Skripten included werden, sind aber nicht relevant.
Sind entweder Abfragen oder die Datenbankverbindungsfunktion.
Ich versteh das auch nicht ganz, da es sich bei dem Skript um ein sehr einfaches handelt.
Vielleicht sollte ich einfach mal ein neues schreiben und versuchen es direkt objektorientiert zu machen.
Des weiteren wären ein paar zusätzliche Sachen wie übergabe der SessionID per URL, wenn Cookies deaktiviert sind und einloggen per Cookie nicht schlecht.

Habe bei mir auch schon festgestellt, das ich manchmal rausfliege, wenn ich länger nix auf der Seite gamcht habe und dann einen Link anklicke.
Die Seite wird ja dann auch neu geladen.
Vielleicht liegt der Fehler auch da irgendwo....
 
Das hat dann eher was mit der Session-Lebensdauer (siehe hier) zu tun, denk ich... Aber neu schreiben wär warscheinlich das einfachste. probier doch mal den ganzen Loginvorgang auf eine Seite zu packen, dann bleibt das übersichtlicher.
 
Zuletzt bearbeitet:
Zurück