Sessions - manchmal 2 Logins erforderlich

diggity

Erfahrenes Mitglied
Servus!

Hab auf einer Seite einen Adminbereich mit Sessions gebaut... nun kommt es manchmal vor, dass ich mich 2x einloggen muss, um eingeloggt zu bleiben. Beim ersten Mal bin ich zwar eingeloggt, aber wenn ich die Seite dann ein weiteres Mal lade, bin ich wieder ausgeloggt. Erst beim zweiten Mal bleibe ich dann eingeloggt.

Woran kann das liegen? Ist wie gesagt nicht immer, nur manchmal. Kommt mir etwas spanisch vor ...



Danke!
 
Hi,
könntest du vielleicht den Code posten?
Dann könnte man besser nach Fehlern suchen ;)
Gruß,
Snowowl
 
Naja welchen Code soll ich da posten ... der Adminbereich hat sehr viel Code ;)
Am Code kanns ja eigenbtlich eh nicht liegen, wenn's nach dem 2ten Login wunderbar geht, oder?
Ich vermute da eher dass das am Server liegt (all-inkl).
 
hm, dann teste des script doch einfach mal auf nem lokalen server. wenn des prob da auch auftrott musses dann doch code liegen, oder an deinem browser, das der vieleicht gelegendlich n kleines prob mit cookis hat.
 
Vermutlich klappt etwas mit der Sitzung, genauer gesagt mit der Übergabe der Sitzungs-ID per Cookie nicht. Dir muss bewusst sein, dass Cookie-Daten immer nur im Head-Bereich einer Anfrage- oder Antwortnachricht stehen und sie damit nicht immer sofort in der $_COOKIES-Variable zur Verfügung stehen.
 
So, ich bin jetzt draufgekommen, dass das nur beim Firefox so ist. Wenn ich mich mit dem IE einlogge, habe ich keine Probleme.
Ich weiß nicht wie das mit anderen Browsern ist, jedenfalls funktionierts mitm IE wunderbar.
 
Okay, meine Login.php sieht so aus:

PHP:
<?php require("inc/db.php"); ?>
<?php
session_start();

	if ($_SESSION["authenticated"] == 1) {

		if (isset($_POST["user"])){
			$name = $_POST["user"];
		}
		if (isset($_POST["pass"])){
			$pass = $_POST["pass"];
		}

		if($name == "xxx" && $pass == "xxx") { //wenn man sich als admin eingeloggt hat ...
			$_SESSION["authenticated"]	= 2; //session athenticated auf 2 setzen (status eingeloggt)
			$_SESSION["uname"]			= "master"; //username
			$_SESSION["name"]			= "Administrator"; //echer name
			$_SESSION["sektion"]		= "master";
		} else { //wenn der username nicht "xxx" ist, in datenbank nachsehen ob dieser user in der db existiert
			$pass = md5($_POST["pass"]);
			mysql_connect($dbhost, $dbuser, $dbpass); 
			mysql_select_db($dbbase);
			$query = "SELECT * FROM user WHERE uname = '$name' AND pass = '$pass'";
			$result = mysql_query($query);								
				$row = mysql_fetch_array($result);
				if($row["id"]) { //wenn der user existiert
					$_SESSION["authenticated"]	= 2; //session athenticated auf 2 setzen (status eingeloggt)
					$_SESSION["uname"]			= $row["uname"]; //username
					$_SESSION["name"]			= $row["name"]; //echer name
					$_SESSION["sektion"]		= $row["sektion"]; //entsprechende sektion
				} else {
					header("Location: admin/index.php");
				}
		}
	
	}

	$fp = fopen("logins.log", "a"); //loggen des logins
	$logstr =	date("d.m.Y/H:i:s")		. "--" . 
				$_SERVER["REMOTE_ADDR"]	. "\t" . 
				$_POST["user"]			. "\t" .
				$_POST["pass"] 			. "\r\n";

	fputs ($fp, $logstr); 
	fclose($fp);

	if ($_SESSION["authenticated"] == 2) { //wenn $_SESSION["authenticated"] nun gleich 2 ist, wird er weitergeleitet und ist eingeloggt
		header("Location: index.php");
	}
?>

Vorm einloggen wird $_SESSION["authenticated"] noch auf 1 gesetzt:
PHP:
<?php
	session_start();
	if(!$_SESSION["authenticated"]) {
		$_SESSION["authenticated"] = 1;
	}
?>

In den Scripts prüfe ich dann, ob man eingeloggt ist, oder nicht:
PHP:
<?php
	session_start();
	if($_SESSION["authenticated"] == 2) {
		//ausgabe der seite mit den admin optionen
	} else {
            //normale ausgabe der seite (für besucher)
        }
?>
So läuft das ungefähr.

€dit: Bin jetzt ausserdem draufgekommen, dass das Problem mit dem 2x einloggen beim Firefox immer auftritt, nicht nur "manchmal". Irgendjemand eine Ahnung was das sein kann?
 
Zuletzt bearbeitet:
Hab mir jetzt alles nochmal genau durchgesehen, und bin immer noch nicht draufgekommen wo das Problem liegt...

Irgendwer von euch noch eine Ahnung?
 
Hi,

Nur ein kleiner Sicherheitshinweis:
PHP:
$fp = fopen("logins.log", "a"); //loggen des logins
    $logstr =    date("d.m.Y/H:i:s")        . "--" . 
                $_SERVER["REMOTE_ADDR"]    . "\t" . 
                $_POST["user"]            . "\t" .
                $_POST["pass"]             . "\r\n";

    fputs ($fp, $logstr); 
    fclose($fp);

Warum schreibst du die Passwörter nicht gleich in Rohform auf sie Seite ? ;)
Zudem solltest du nun die Datei fürs loggen umbenennen, da jetzt jeder den namen weis.

mb fanste
 
Zurück