Bug im AutoLogin

Radhad

Erfahrenes Mitglied
Auto-Login: Cookie wird nicht gesetzt

Hallo zusammen,

ich bin gerade dabei eine Auto-Login Funktion zu erstellen. Allerdings treten einige Fehler auf:
- Lokal werden Cookies erstellt, aber beim schließen des Browsers gelöscht
- Online werden keine Cookies erstellt.

Mein php-Script zum einloggen sieht wie folgt aus:

Wenn "Auto-Login" gewählt wurde:
PHP:
if(isset($_POST["autologin"]) && $_POST["autologin"] == 'on')
{
  $time = time() + (60*60*24*365*100);
  setcookie('LogIn_Username',$_SESSION["nickname"],$time);
  setcookie('LogIn_Password',$pw,$time);
}

Prüfen, ob Besucher nen Cookie hat:
PHP:
if(isset($_COOKIE['LogIn_Username']) && isset($_COOKIE['LogIn_Passwort']) && !isset($_SESSION["userid"]))
{
  header ("Location: login_user.php?kecks=true");
}
Für jede Hilfe bin ich dankbar.


Gruß Radhad
 
Hallo,

der Wert für die Ablaufzeit des Cookies hat einen bestimmten Wertebereich. Dieser wird durch das Hinaufrechnen von 100 Jahren überschritten, wodurch es vermutlich zum Überlauf und somit zu einem Zeitpunkt in der Vergangenheit kommt. Schraub den Wert also einfach ein bisschen runter – ein Jahr sollte eigentlich auch reichen. Zumal du das Cookie ja bei jedem Besuch neu setzen kannst. Dadurch bleibt der Benutzer „für immer“ eingeloggt, sofern er in Abständen von höchstens einem Jahr vorbeischaut.

Grüße,
Matthias
 
Ok, die Cookies werden nun angelegt (mit 2 Jahren Laufzeit).

Allerdings klappt das einloggen nicht - anscheinend ist meine Abfrage falsch bei
PHP:
if(isset($_COOKIE['LogIn_Username']) && isset($_COOKIE['LogIn_Passwort']) && !isset($_SESSION["userid"]))
{
  header ("Location: login_user.php?kecks=true");
}
Meiner Meinung nach ist da auch kein logischer Fehler drin :/

[EDIT]
ok, ersetzten "Passwort" durch "Password" dann klappt das natürlich auch :D
 
Zuletzt bearbeitet:
Da ist zwar kein logischer Fehler drin, aber wenn jemand die gleichen Variablen auf einer anderen Seite benutzt wie du, dann ist bei dir der Login frei und ich brauch mich nicht mal anmelden ;-)

Lass einfach mal die $time beim setcookie weg und schau, obs dann geht ;-)
 
Zuletzt bearbeitet:
Hm nun ja. Ich hoffe ich liege jetzt nicht ganz falsch, aber bei gleichem Namen wird der letzte überschrieben. Er überprüft nicht die Werte in den Cookies. Jedenfalls nicht in dem gezeigten code. Da wird nur abgefragt, ob sie vorhanden sind oder nicht.

Gruß
Chris
 
Ein Cookie gilt immer nur fuer die Seite wo er auch gesetzt wurde. Ein Script einer anderen Seite kann also den Cookie dieser Seite nicht ueberschreiben, auch wenn die Namen identisch sind.
 
Sieht auch schon bei "Cookies anzeigen" im Firefox 2.0 - Dort werden die Cookies gruppiert Domainname angezeigt.
 
Ich habe jetzt ein Problem bei dem automatischen einloggen. Folgende Fehlermeldung kommt im Firefox seit heute:
Code:
Fehler: Umleitungsfehler

Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.
    *   Dieses Problem kann manchmal auftreten, wenn Cookies deaktiviert oder abgelehnt werden.

Hier der Code in der index.php, der prüft, ob man nicht eingeloggt und einen Cookie hat:
PHP:
if(isset($_COOKIE['LogIn_Username']) && isset($_COOKIE['LogIn_Password']) && !isset($_SESSION["userid"]))
	{
        header ("Location: login_user.php?kecks=true&link=".rawurlencode("http://".$_SERVER['HTTP_HOST']."".$_SERVER['REQUEST_URI']));
    }
Hier die login_user.php, welche den Benutzer einloggen soll:
PHP:
<?php 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
include("connect.php");

if(isset($_GET["kecks"]) && $_GET["kecks"] == true)
{
	$name = $_COOKIE['LogIn_Username'];
	$pw = $_COOKIE['LogIn_Password'];
	$autologin = 'on';
}
else
{
	$name = $_POST["name"];
	$pw = md5($_POST["pwd"]);
	if(isset($_POST["autologin"]) && $_POST["autologin"] == 'on')
		$autologin = 'on';
	else
		$autologin = 'off';
}
$sql = "SELECT userid, benutzername FROM users WHERE benutzername LIKE '".$name."' AND passwort = '".$pw."'";
$result = mysql_query ($sql) or die(mysql_error()); 

if (mysql_num_rows ($result) > 0) 
{
	// Benutzerdaten in ein Array auslesen. 
	$data = mysql_fetch_row ($result);
	
	// Sessionvariablen erstellen und registrieren 
	$_SESSION["userid"] = $data[0]; 
	$_SESSION["nickname"] = $data[1];
	
	$sql = "SELECT wgg.websitegruppenglobalname FROM websitegruppenglobal wgg JOIN websitegruppenglobalmitglieder wggm ON wggm.websitegruppenglobalid = wgg.websitegruppenglobalid WHERE userid = ".$data[0];
	$resource = mysql_query($sql) or die(mysql_error());
	$group = mysql_fetch_array($resource);
	$_SESSION["globalgroup"] = $group[0];
	
	$sql = "SELECT sessionid FROM users_online WHERE userid = ".$data[0];
	$resource = mysql_query($sql) or die (mysql_error());
	if(mysql_num_rows($resource) > 0)
	{
		$sessionold = mysql_fetch_array($resource);
		session_id($sessionold[0]);
	}
	
	if($autologin == 'on')
	{
		$time = time() + (60*60*24*365*2);
		setcookie('LogIn_Username',$_SESSION["nickname"],$time);
		setcookie('LogIn_Password',$pw,$time);
	}

	header ("Location: ".rawurldecode($_GET["link"]));
} 
else 
{ 
	header ("Location: index.php?fehler=1"); //bewirkt, dass ein Login-Formular includet wird in der index.php
} 
?>
Ich hoffe ihr könnt mir da weiterhelfen.



Gruß Radhad
 
Zurück