eingeloggt bleiben

thehasso

Erfahrenes Mitglied
Hallo,

ich würd gern wissen, wie man das umsetzen kann, das User bei mir in der Website eingeloggt bleiben können. Und zwar hab ich ein Login Skript mit dem Dreamweaver erstellt und möchte nun, das der User automatisch eingeloggt bleibt. Dazu hab ich folgendes gemacht:

Wenn ich die Seite mit F5 aktualisiere dann wird Benutzername und Passwort nicht mehr angezeigt. Irgendwie gehts nicht so..

PHP:
<?php
setcookie("username",$Email,time()+(3600*24*100)); 
setcookie("passwort",$Password,time()+(3600*24*100));
?>
<?php
if($_COOKIE['username'] == $Email AND $_COOKIE['passwort'] == $Password)
   {
   //Cookies verlängern
  
   setcookie("username",$Email,time()+(3600*24*100)); 
   setcookie("passwort",$Password,time()+(3600*24*100));
   //Erst jetzt darf eine Ausgabe erfolgen    echo "Hallo " . $username;
    echo "Hallo";
	}
?> 

<?php
$cookie = $_COOKIE["username"];
echo "Der Inhalt des Cookies: $cookie";echo"<br/>";
$cookie = $_COOKIE["passwort"];
echo "Der Inhalt des Cookies: $cookie";echo"<br/>";
?>

das funktioniert ja irgendwie mit einer checkbox?

Würd mich über eure hilfe freuen.

MFG
 
Zuletzt bearbeitet:
Ich sehe den Grundlegenden Sinn in diesem Abschnitt nicht. Würde man hier mit Codeminimierung arbeiten, würde nicht viel übrig bleiben:
PHP:
echo "Hallo

Der Inhalt des Cookies: NULL<br/>Der Inhalt des Cookies: NULL<br/>";

Woher kommt $Email und $Passwort?

Wie kann der Vergleich ($_COOKIE['username'] == $Email) stattfinden, wenn die Werte dazu nicht gesetzt wurden?
 
Also $Email $password werden von der Datenbank ausgelesen. Wenn man sicht einloggt. Und dann sollten die immer mit den Cookie vergleicht werden hab ich mir gedacht.


Aber nach 2 mal auf aktualisieren klicken wird der cookie nicht mehr ausglesen und nicht angezeigt....



also so siehts aus:

PHP:
<?php
require_once('Connection.php');

// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
  $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['Email'])) {
  $loginUsername=$_POST['Email'];
  $password=$_POST['Password'];
  $loginIntId = $_POST['Email']; 
  
	  
	  
   $SQL_1 = sprintf("SELECT * FROM benutzer WHERE Email='%s'",$loginIntId);
   
    	$REC_1 = mysql_query($SQL_1); 

    	$RECset = mysql_fetch_assoc($REC_1);
		
		$loginIntId = $RECset["ID"];
		$Vorname = $RECset["Vorname"];
		$Nachname = $RECset["Nachname"];
		$Password = $RECset["Password"];
		$Email = $RECset["Email"];
  
  
  $MM_fldUserAuthorization = "";
  $MM_redirectLoginSuccess = "ready.dwt.php";
  $MM_redirectLoginFailed = "fehler.php";
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_root, $root);
  
  $LoginRS__query=sprintf("SELECT Email, Password FROM benutzer WHERE strEmail=%s AND strPassword=%s",
    GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 
   
  $LoginRS = mysql_query($LoginRS__query, $root) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
     $loginStrGroup = "";
    
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;
	$_SESSION['MM_UserId'] = $loginIntId; //explizit von mir eingefügt! 
	$_SESSION['MM_Vorname'] = $Vorname; //explizit von mir eingefügt! 
	$_SESSION['MM_Nachname'] = $Nachname;//explizit von mir eingefügt! 

    if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];	
    }
    header("Location: " . $MM_redirectLoginSuccess );
  }
  else {
    header("Location: ". $MM_redirectLoginFailed );
  }
}
?>
<?php
setcookie("username",$Email,time()+(3600*24*100)); 
setcookie("passwort",$Password,time()+(3600*24*100));
?>
<?php
if($_COOKIE['username'] == $Email AND $_COOKIE['passwort'] == $Password)
   {
   //Cookies verlängern
  
   setcookie("username",$Email,time()+(3600*24*100)); 
   setcookie("passwort",$Password,time()+(3600*24*100));
   //Erst jetzt darf eine Ausgabe erfolgen    echo "Hallo " . $username;
    echo "Hallo";
	}
?> 

<?php
$cookie = $_COOKIE["username"];
echo "Der Inhalt des Cookies: $cookie";echo"<br/>";
$cookie = $_COOKIE["passwort"];
echo "Der Inhalt des Cookies: $cookie";echo"<br/>";
?>
 
Nach einem aktualisieren gibt es keine POST-Daten mehr. Logisch, dass die Cookies dann durch "nichts" überschrieben werden und daraus nichts wird.

Das Passwort sollte man hierbei nicht im Cookie speichern. Lieber einen Hash-Wert, der auf die Login-Daten intern verweist und nur für diesen Benutzer gültig sind.

Ich denke du meinst so etwas:

PHP:
if (
     !isset($_SESSION['name'])
  && isset($_COOKIE['loginHash'])
)
{
  // Login mit dem Hash
}
 
hmm ich dachte das passwort und die Email speichert sich imm Cookie 24 Stunden bzw. mehr je nachdem was man angibt.


Hmm also wie geh ich denn hier am besten vor was muss ich als erstes machen ist ja schwerer als ich dachte.
 
Nochmal: Nach dem Aktualisieren oder neuen Besuch gibt es keine POST-Daten mehr. Das heißt in deinem Skript werden insbesondere diese Zeilen angesprochen:
PHP:
<?php
require_once('Connection.php');

// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];

setcookie("username",$Email,time()+(3600*24*100)); 
setcookie("passwort",$Password,time()+(3600*24*100));

setcookie("username",$Email,time()+(3600*24*100)); 
setcookie("passwort",$Password,time()+(3600*24*100));

echo "Hallo";

$cookie = $_COOKIE["username"];
echo "Der Inhalt des Cookies: $cookie";echo"<br/>";
$cookie = $_COOKIE["passwort"];
echo "Der Inhalt des Cookies: $cookie";echo"<br/>";
?>

Wie du siehst werden die Cookie-Daten überschrieben mit "nichts"!

Daher solltest du wie folgt vorgehen (Pseudocode):
Code:
if (Post-Daten gesetzt)
{
  Login über Post Daten;
  Daten als Hash in Cookies speichern;
}
else if (Hash im Cookie)
{
  Login per Hash;
  Cookie erneuern;
}
 
Ich orientiere mich gerne an ein Beispiel...mit deinen Informationen kann ich leider nichts anfangen. Weil ich dass das erste mal mache. Fahrrad fahren kann man auch schwer erklären.
Gibts keine Musterlösung dazu? hab gegogelt aber nur das gefunden:

http://www.php-einfach.de/tuts_php_cookies.php


so hab ich das auch gemacht aber anscheinden falsch. (beispiel ist ganz unten)

außerdem der cookie wurde doch für 24 stunden im meinen beispiel gespeichert...dann müsst er auch angezeigt werden.
 
Definitiv! Du hast sinnlos Kopieren & Einfügen verwendet.

Dieser Teil ist dazu da, die Daten zu speichern sofern man eingeloggt wurde / die Daten bekannt sind:
PHP:
<?php
setcookie("username",$username,time()+(3600*24*100));
setcookie("passwort",$passwort,time()+(3600*24*100));
?>

Dieser Teil "verwaltet" ein Login für Personen, welche die Seite neu besuchen und direkt eingeloggt werden sollen in ihr Konto:
PHP:
<?php
if($_COOKIE['username'] == $username AND $_COOKIE['passwort'] == $passwort)
   {
   $_SESSION["username"] = $username; //Session setzen

   //Cookies verlängern
   setcookie("username",$username,time()+(3600*24*100));
   setcookie("passwort",$passwort,time()+(3600*24*100));
   //Erst jetzt darf eine Ausgabe erfolgen    echo "Hallo " . $username;
   }
else
   {
   echo "Hallo Gast";
   }
?>

Und hier ist die von mir vorgeschlagene Struktur wiederzufinden (siehe oben). Wobei meine Struktur noch zusätzlich beachtet, dass sich jemand neu oder unter anderem Konto einloggen möchte.

Eine Frage nebenbei:
Ist dein Ziel, dass der Benutzer automatisch eingeloggt wird, wenn er die Seite nach (meinetwegen) 30 Tagen wieder besucht?
 
So danke erstmal hab das so gemacht den einen cide nach login eingefügt und den anderen vor login.

MAn sieht ja in website wie Studivz auch so eine Checkbox. So eine muss ja gesetzt werden um zu wissen ob der User seine Benutzerdaten jedesmal eingibt also keine automatische anmeldung oder wenn ein hacken vorliegt dass man die benutzerdaten nicht nochmal eingibt.


Soll ich das so machen das ich überprüfe ob das hacken gesetzt wurde falls ja denn setze ich passwwort und Email als Value im Feld und wenn nicht dann soll kein wert als Value in Feld eingegeben werden. Also der Wert wär dann das Passwort und Email im gespeicherte Cookie.

Übrigens wozu ein Hashcode versteh ich nicht..ob das passwort oder ein Hashcode gespeichert wird im Cookie wo liegt das Problem?

lg
 
Soll ich das so machen das ich überprüfe ob das hacken gesetzt wurde falls ja denn setze ich passwwort und Email als Value im Feld und wenn nicht dann soll kein wert als Value in Feld eingegeben werden. Also der Wert wär dann das Passwort und Email im gespeicherte Cookie.

Jop. Übliche Vorgehensweise.

Übrigens wozu ein Hashcode versteh ich nicht..ob das passwort oder ein Hashcode gespeichert wird im Cookie wo liegt das Problem?

Wo liegt das Problem sein eigenes Passwort nahezu im Klartext auf dem PC zu haben?

Der PC ist dein Schreibtisch, der Browser ein Ordner mit vielen Seiten und das Cookie eine Notiz auf eine der Seiten. Jeder der gewollt oder ungewollt Zugriff auf deinen Ordner hat sieht auch die Notiz und somit dein Passwort / die Daten.

Warum ist es keine Lösung das Passwort als Hash zu speichern?

Die meisten Seiten setzen die Notiz (das Cookie) in Ketten mit Zahlenschloss (den MD5-Hash oder SHA-Hash des Passworts). Jemand der dein Passwort knacken will geht davon aus und versucht dieses Zahlenschloss durch probieren (z.B. Rainbow-Table für einen Hash) zu knacken. Sobald ihm dies gelingt hat er natürlich deine Notiz (Passwort im Klartext) und kann damit auch das Schloss auf es auf anderen Seiten öffnen (sich unter deinem Namen woanders einloggen).

Aber das kann auch bei der Seite direkt geknackt werden, oder nicht?

Klar, allerdings wird die Seite spätestens nach dem dritten missglückten Versuch abbrechen (wenn es ein gutes Skript ist). Das bedeutet enorme Arbeit und Wartezeit für den Angreifer, während er mit dem Zahlenschloss (Hash vom Passwort) in den eigenen Händen es immer und immer wieder versuchen kann bis er Erfolg hat.

Wie geht es besser?

Ein(e) universeller Hash / universelle ID, abweichend von der eigentlichen Benutzer-ID intern, als Notiz (Cookie) verwenden. Dies sagt nichts über Name oder Passwort aus. Zudem mindert es den Traffic, sowohl vom Client (Besucher) als auch vom Server (deine Seite):

Cookies Vorher (mit Passwort als MD5):
Code:
Name="Ali Mente";Passwort="a3cca2b2aa1e3b5b3b5aad99a8529074"

Cookies Nachher (MD5-Hash):
Code:
Login="d41d8cd98f00b204e9800998ecf8427e"

Cookies Nachher (universelle ID):
Code:
Login=1320189675423
 
Zuletzt bearbeitet:
Zurück