Auto-Login, wie? Cookies löschen sich....

Hi zusammen,

ich habe heute mal wieder ein neues Problem....:(

Und zwar wollte ich ein Autologin in meine Seite einbauen.
Wäre das möglich, dass mir jemand helfen könnte? Danke im vorraus :)

Hier in der login.php habe ich das ganze Loginzeug:
PHP:
<?php
function show_login() {
?>

<div align="center">
<p><form method="post" action=""><input type="text" size="13" id="login" value="<? echo $_COOKIE['Username']; ?>" name="user" onclick="if(this.value == 'Benutzer') this.value=''" onblur="if(this.value == '') this.value='Benutzer'" />
  <input type="password" size="13" id="login" value="<? echo $_COOKIE['Password']; ?>" name="pass" onclick="if(this.value == 'Passwort') this.value=''" onblur="if(this.value == '') this.value='Passwort'" />
  <input type="submit" value="Login" id="login_submit" name="login" /> <a href="?cat=registration" class="login">Register</a> <a href="?cat=passlost" class="login">PW?</a>
</form></p>
</div>
	
<?php
}

if($_SESSION[access] == TRUE) {
  // Timestamp eintragung	
  $time = time();
  mysql_query("UPDATE users SET timestap = '$time' WHERE user_name= '$_SESSION[user]'") or die(mysql_error());
  
  // Anzeige nach dem Login
  $res = mysql_query("SELECT * FROM users WHERE user_name='$_SESSION[user]'");
  $aus = mysql_fetch_array($res);
	   
  echo "<p style=\"padding-top:3px;\"><b>";
  if($aus[user_nick] !== "") echo "<span style=\"font-size:10px; color:#FFF;\">$aus[user_nick]</span>";
  else echo "<span style=\"font-size:10px; color:#FFF;\">$aus[user_vorname]</span>";

  echo " <img src=\"images/bull2.PNG\" /> ";
  echo "<a href=\"?cat=profil_view\" class=\"login\">Verwaltung</a> <img src=\"images/bull2.PNG\" /> ";
  echo "<a href=\"?cat=profil\" class=\"login\">Profil</a> <img src=\"images/bull2.PNG\" /> ";
  echo "<a href=\"?cat=news&action=logout\" class=\"login\">Logout</a></b></p>";
 

}
else {
	$uid = isset($_POST[user]) ? $_POST[user] : $_SESSION[user];
	$pwd = isset($_POST[pass]) ? $_POST[pass] : $_SESSION[pass];
		if(!isset($uid))
	{
		show_login();
	}
	else {
		$res = mysql_query("SELECT * FROM users WHERE user_name='$uid'");
		$aus = mysql_fetch_array($res);
		
		if(mysql_num_rows($res) == "0") {
			
			echo "<p><span style=\"color:red;\">Meldung:</span> Zugangsdaten fehlerhaft!</p>";
			echo "<meta http-equiv=\"refresh\" content=\"2;\" />";
		
		}
		else {
			
			if($uid == $aus[user_name] && md5(md5($pwd)) == $aus[user_password]) {
			
				if($aus[rank] == "1" OR $aus[user_activated] == "1") {
				
					echo "<p><span style=\"color:red;\">Meldung:</span> Account gesperrt!</p>";
				
				}
				else {
					$_SESSION[access] = TRUE;
					$_SESSION[user] = $aus[user_name];
					
					  $datum = date("d.m.Y");
 					  $uhrzeit = date("H:i");
  
                    mysql_query("UPDATE users SET user_visit = '$datum - $uhrzeit' WHERE user_name= '$_SESSION[user]'") or die(mysql_error()); 
					echo "<meta http-equiv=\"refresh\" content=\"0; URL=?cat=profil_view\" />";
				}
			
			}
			else {
			
				echo "<p style=\"font-size:9px;\"><span style=\"color:red;\">Meldung:</span> Zugangsdaten fehlerhaft!</p>";
				echo "<meta http-equiv=\"refresh\" content=\"2;\" />";
			
			}
			
		}
	
	}
	
}


?>

Und in der index.php habe ich die Cookies drinne:
PHP:
<?php
session_start();
setcookie("User", $_SESSION[user], time()+3600*24*30); // 1 Monat
setcookie("Pass", $_POST[pass], time()+3600*24*30); // 1 Monat

// Logout
if($_GET[action] == logout) { 

	unset($_SESSION[access]);
	unset($_SESSION[user]);
	echo "<meta http-equiv=\"refresh\" content=\"0; URL=?cat=news\" />";
   
}......


Aber leider jedes mal, wenn ich den Browser schließe, verschwinden die Cookies...

Und das zweite Problem: Wie bekomm ich ein Auto-login hin?

Ich verlange von euch nicht, dass ihr mir nen fertiges Script hinklatscht, falls es den anschein hat ;)

Danke nochmals

Gruß
Dennis
 
PHP:
<? echo $_COOKIE['Username']; ?>
<? echo $_COOKIE['Password']; ?>

Und in der index.php habe ich die Cookies drinne:
PHP:
setcookie("User", $_SESSION[user], time()+3600*24*30); // 1 Monat
setcookie("Pass", $_POST[pass], time()+3600*24*30); // 1 Monat
Aber leider jedes mal, wenn ich den Browser schließe, verschwinden die Cookies...

Cookies die man nicht setzt gibt es nicht. Starr mal 5 Minuten auf deinen Code und finde den Unterschied. Viel Spaß mit dem Suchbild ;)
 
Ok das stimmt xD aber die Cookies werden nicht angezeigt. Sprich bei Firefox. Da kann man ja nachschauen auf welcher Page man welche cookies hat blablabla...
Und da hab ich nachgeschaut und da sind nur die cookies von phpmyadmin.
Sie werden zwar erstellt, jedoch wenn man den Browser schließt gibts nichts mehr...
 
Sry, für den Doppelpost, habe aber einiges hinbekommen.

Und zwar funktioniert soweit die Speicherung des Cookies. Sie wird auch ausgegeben, jedoch habe ich keinen blassen schimmer wie ich mich automatisch einloggen lasse.

Ich weiß das es an den magischen zeilen liegt:

PHP:
        $uid = isset($_POST[user]) ? $_POST[user] : $_SESSION[user];
	$pwd = isset($_POST[pass]) ? $_POST[pass] : $_SESSION[pass];
		if(!isset($uid))
	{
		show_login();
	}
	else {
		$res = mysql_query("SELECT * FROM users WHERE user_name='$uid'");
		$aus = mysql_fetch_array($res);
		
		if(mysql_num_rows($res) == "0") {
			
			echo "<p><span style=\"color:red;\">Meldung:</span> Zugangsdaten fehlerhaft!</p>";
			$note->refresh();
		
		}
		else {
			
			if($uid == $aus[user_name] && md5(md5($pwd)) == $aus[user_password]) {
			
				if($aus[rank] == "1" OR $aus[user_activated] == "1") {
				
					echo "<p><span style=\"color:red;\">Meldung:</span> Account gesperrt!</p>";
				
				}
				else {
					$_SESSION[access] = TRUE;
					$_SESSION[user] = $aus[user_name];
					$_SESSION[pass] = $aus[user_password];
					
					  $datum = date("d.m.Y");
 					  $uhrzeit = date("H:i");
  
                    mysql_query("UPDATE users SET user_visit = '$datum - $uhrzeit' WHERE user_name= '$_SESSION[user]'") or die(mysql_error()); 
					echo "<meta http-equiv=\"refresh\" content=\"0; URL=?cat=profil_view\" />";
				}

Ich check aber nicht wie ich ein oder rein setze denn nichts geht....
 
Pseudocode:
Code:
if (Cookie mit Zugangsdaten empfangen)
{
  Anmelden;
}
else
{
 ... andere bestehende Vorgänge ...
}

Eine ganz einfache Prüfung vorschalten, die einen Login vollzieht.
 
Habs auch probiert, geht auch nicht :(

PHP:
$ucookie = $_COOKIE['Username'];
		$pwcookie = $_COOKIE['Passwort'];
		
			if($ucookie ==  $aus[user_name] && $pwcookie == $aus[user_password]) 
			{
			$_SESSION[access] = TRUE;
		    $_SESSION[user] = $ucookie;
			$_SESSION[pass] = $pwcookie;
					
			$datum = date("d.m.Y");
 			$uhrzeit = date("H:i");
  
            mysql_query("UPDATE users SET user_visit = '$datum - $uhrzeit' WHERE user_name= '$_SESSION[user]'") or die(mysql_error()); 
		    echo "<meta http-equiv=\"refresh\" content=\"0; URL=?cat=profil_view\" />";
			}
			else
			{
				
		$uid = isset($_POST[user]) ? $_POST[user] : $_SESSION[user];
	    $pwd = isset($_POST[pass]) ? $_POST[pass] : $_SESSION[pass];
		    if(!isset($uid))
			{
		    show_login();
			}
	        else {
.......

Es geht einfach nicht, normales Login geht, aber das automatische einloggen klappt nicht... Die Daten werden aber in den inputs angezeigt!
 
Also ich hab da 3 kleine Tipps für dich.

1.
Schreib eine Funktion die den login durchführt.
Diese musst du dann nur noch mit den Cookie bzw. POST Daten füttern.
Besser wäre ein Object, das sich beim instazieren um alles kümmert und dir anschließend alle Daten zu den User zur Verfügung stellt.

2.
Meta angaben gehören nicht in den BODY eines HTML Dokumentes!

3.
Schreibe nie das PW unverschlüsselt in ein Cookie!
Es gibt sowas wie Cookie Manager wo man das dann nachlesen kann.
Mann sollte auch nicht den Namen des User im Cookie speichern, besser wäre seine ID.
 
Mein Passwort ist in MD5 gespeichert, also im Cookie.

Danke für deine 3 Tipps, aber das Login ist in einer eigenen Datei, also fast eine Class ^^

Gruß
Dennis
 
Zurück