zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden wie cookie bei login nutzen?

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 08.08.2008, 21:04
Software Engineer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 03.01.2008
Ort: Altleiningen
Beiträge: 305
markuskoehler kann nur auf Besserung hoffen
Ausrufezeichen wie cookie bei login nutzen?

(Unter Umständen ist diese Frage nur nervig, aber mir fielen keine geeigneten Schlagwörter ein, um die weltgrößte Suchmaschine zu bemühen...)

Also: Ich würde gerne wissen, wie ich bei einem Login-System Cookies einbauen kann, so dass der User für einen bestimmten Zeitraum eingeloggt bleibt?

Vielen Dank schonmal im Vorraus,

Markus Köhler
__________________
MfG Markus Köhler
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 08.08.2008, 22:23
Neuer Benutzer
neuer user
 
Registriert seit: 21.05.2007
Beiträge: 13
Dyne befindet sich auf einem aufstrebenden Ast
Standard

Eine Möglichkeit wäre z.B. die uid und einen uid-passwort-hash im Cookie zu speichern.

z.B.
PHP-Code:
// Setzen des Cookies nach dem ersten Login

setcookie('userid'$user['uid']);
setcookie('loginhash'md5($user['uid'].$user['pass']));

// ...

// Auslesen des Cookies beim erneuten Besuch der Seite

if(isset($_COOKIE['userid'])){
  
// ...
  // Passwort aus der Datenbank holen
  // ...
  
if($_COOKIE['loginhash']==md5($user['uid'].$user['pass'])){
    
// Logge den User ein
  
}

Als Hash könntest du theoretisch auch nur das Passwort nehmen, aber md5-Codes sind nicht so richtig sicher, da man über Rainbow-Tables viele Codes entschlüsseln kann. Durch Hinzufügen der ID verminderst du die Wahrscheinlichkeit, dass jemand den Hash entschlüsselt. Wenn du etwas wie
PHP-Code:
md5($user['uid'].$user['pass'].'qwertz'); 
verwendest, erhöht das die Sicherheit noch mehr.
Du darfst jedoch nicht vergessen den Hash beim Setzen und beim Auslesen gleich aufzubauen (am Besten du verwendet eine Funktion).

Hoffe ich konnte helfen

Geändert von Dyne (08.08.2008 um 22:32 Uhr)
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 08.08.2008, 23:02
Software Engineer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 03.01.2008
Ort: Altleiningen
Beiträge: 305
markuskoehler kann nur auf Besserung hoffen
Ausrufezeichen

das prinzip habe ich verstanden und verinnerlicht, vielen dank @ Dyne. Nun stellt sich mir aber die Frage, obgleich mir auch selbst klar ist, dass das wohl ziemlich blauäugig ist, aber bin wohl schon müde:

WO muss ich denn den code zum auslesen des cookies WIE einbauen, dass der User eingeloggt werden kann???

Hier mein kompletter, modifizierter Code der "validateLogin.inc.php" aus dem Tutorial von Developers Guide:

PHP-Code:
<?php
session_start
();
// Überprüfen, ob das Formular abgeschickt wurde und ob beide Angaben gemacht wurden.
    
if(isset($_POST['username'], $_POST['password']) and strcmp(trim($_POST['username']),'') != and strcmp(trim($_POST['password']),'') != ) {
          
// Einbinden der Konfigurationsdatei
          
require_once('../dbconnect/login.dbc.php');
          
// Erstellen der Verbindung zur MySQL-Datenbank
          
if(!$connection mysql_connect($_config['host'], $_config['user'], $_config['password'])) {
               die(
'Verbindung zum Datenbankserver konnte nicht hergestellt werden.');
          };
          if(!
mysql_select_db($_config['database'], $connection)) {
              die (
'Die Datenbank ' $_config['database'] . ' kann nicht verwendet werden.<br />MySQL-Error:<br />' mysql_error());
          };
          
// SQL-Anweisung an die Datenbank senden, um erstens herauszufinden, ob
          // diese Kombination von Usernamen und Passwort überhaupt existiert und
          // zweitens bei Existenz Userinformationen auszulesen
          
$sql "SELECT * FROM login WHERE username = '" trim($_POST['username']) . "'
                      AND
                           password = '" 
md5(trim($_POST['password'])) . "'";
          
$res mysql_query($sql) or die('Error[SELECT|User]:<br /><pre>' $sql '</pre><br />MySQL-Error: ' mysql_error());
          
// Nur wenn genau ein Datensatz selektiert wurde wird der User eingeloggt.
          // In allen anderen Fällen wird er zurück zum Loginformular geleitet.
          
if(mysql_num_rows($res) != 1) {
              
Header('Location: http://' $_SERVER['HTTP_HOST'] . '?page=login_error');
              exit();
          }
          else {
             
// Die userspezifischen Daten werden ausgelesen und der Session hinzugefügt
             
$user mysql_fetch_object($res);
             
$_SESSION['anzahlLogins'] = $user->anzahlLogins;
             
$_SESSION['email'] = $user->email;
             
$_SESSION['geschlecht'] = $user->geschlecht;
             
$_SESSION['vorname'] = $user->vorname;
             
$_SESSION['nachname'] = $user->nachname;
             
$_SESSION['username'] = $user->username;
             
$_SESSION['id'] = $user->id;
             
// Aktualisierung des Anzahl der Logins
             
$sql 'UPDATE login SET anzahlLogins = anzahlLogins + 1 WHERE id = ' $user->id;
             
mysql_query($sql) or die('Error[UPDATE|User]:<br /><pre>' $sql '</pre><br />MySQL-Error: ' mysql_error());

             
// Der Login war erfolgreich und der User wird zur Startseite des
             // passwortgeschützen Bereichs weitergeleitet
             
Header('Location: http://' $_SERVER['HTTP_HOST'] . '?page=login_success');
             exit();
          };
          
    }
    else {
          
Header('Location: http://' $_SERVER['HTTP_HOST'] . '?page=login_error');
          exit();
    };
?>
__________________
MfG Markus Köhler
Mit Zitat antworten
  #4 (permalink)  
Alt 09.08.2008, 08:48
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.457
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Servus,

genau das habe ich gerade in der Mangel, es funzt mittlerweile auch gut.

Das Cookie besteht bei mir aus Namen, Passwort, Datum/Zeit und dem MD5.
Das ganze noch ein wenig verschlüsselt damit es nicht lesbar ist. Das Cookie
hat dann halt mal einige 100 Zeichen ... macht aber nischt.

Gesetzt wird das Cookie mit
Code:
document.cookie =
Beim Aufruf einer Seite lade ich das Cookie, mache einen "internen Login" und
überprüfe dann wie groß die Zeitabweichung ist. Ist die größer als 120 sec gibt's
ein Good Bye.
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
  #5 (permalink)  
Alt 09.08.2008, 10:15
Benutzerbild von fox
fox fox ist offline
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 11.09.2006
Beiträge: 1.010
fox sorgt für eine eindrucksvolle Atmosphärefox sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Scheppertreiber Beitrag anzeigen
Gesetzt wird das Cookie mit
Code:
document.cookie =
Du sprichst hier aber von Javascript, Markus will das ja mit PHP lösen.

Das Cookie kannst du mit setcookie setzen, mit der Superglobalen $_COOKIE beim nächsten Skriptaufruf dann auslesen.

PHP-Code:
          else {
             
// Die userspezifischen Daten werden ausgelesen und der Session hinzugefügt
             
$user mysql_fetch_object($res);
             
$_SESSION['anzahlLogins'] = $user->anzahlLogins;
             
$_SESSION['email'] = $user->email;
             
$_SESSION['geschlecht'] = $user->geschlecht;
             
$_SESSION['vorname'] = $user->vorname;
             
$_SESSION['nachname'] = $user->nachname;
             
$_SESSION['username'] = $user->username;
             
$_SESSION['id'] = $user->id;
             
// Aktualisierung des Anzahl der Logins
             
$sql 'UPDATE login SET anzahlLogins = anzahlLogins + 1 WHERE id = ' $user->id;
             
mysql_query($sql) or die('Error[UPDATE|User]:<br /><pre>' $sql '</pre><br />MySQL-Error: ' mysql_error());

             
// Der Login war erfolgreich und der User wird zur Startseite des
             // passwortgeschützen Bereichs weitergeleitet

// hier dein cookie setzen

             
Header('Location: http://' $_SERVER['HTTP_HOST'] . '?page=login_success');
             exit();
          };
          
    } 
Bei allen anderen Seiten musst du dann überprüfen, ob dein Cookie vorhanden ist. Verwende am besten eine Art Hash, speichere *niemals* das Passwort im Klartext in einem Cookie. Außerdem können Cookies manipuliert werden.

Im Prinzip brauchst du dich garnicht mit den Cookies rumzuschlagen, wenn du Sessions verwendest. Die werden nämlich vollautomatisch in einem Cookie gespeichert (oder alternativ per URL übertragen) und laufen nach einem bestimmten Zeitraum ab.
Mit Zitat antworten
  #6 (permalink)  
Alt 09.08.2008, 10:44
Neuer Benutzer
neuer user
 
Registriert seit: 21.05.2007
Beiträge: 13
Dyne befindet sich auf einem aufstrebenden Ast
Standard

Ich habe es so verstanden, dass ein Benutzer nach einer größeren Dauer (z.B. nach einem Tag) automatisch wieder einloggen kann. (Wie es z.B. auch hier im Forum ist.)

Für die Verwaltung eines Besuchs sollten auf jeden Fall Cookie-Sessions verwendet werden.

Was ich in meinem obigen Beitrag beschrieben habe, soll nur den Relogin nach Ablauf der Session (häufig 15 Minuten) ermöglichen.
Mit Zitat antworten
  #7 (permalink)  
Alt 14.08.2008, 09:55
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.956
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Dyne Beitrag anzeigen
PHP-Code:
  // Passwort aus der Datenbank holen 
Ein Passwort sollte niemals in einer Datenbank gespeichert werden. In der Datenbank sollte immer nur der Hash-Wert (MD5 oder besser SHA) stehen.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #8 (permalink)  
Alt 15.08.2008, 16:27
Benutzerbild von Unsk1ll3d
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 03.01.2006
Beiträge: 206
Unsk1ll3d befindet sich auf einem aufstrebenden Ast
Standard

Ist $_COOKIE nicht von register_globals abhängig?

Ich würde entweder ein RAW-Cookie mit einem Hashwert setzen (und diesen temporär als SID Hashwert nutzen) oder das Cookie parsen lassen, ohne dafür $_COOKIE zu verwenden.

PHP: http_parse_cookie - Manual


Als Hash-Methode würde ich schon fast zu RSA greifen, aber dies benötigt wieder "extra" httpd-Module, alternativ sha1(), da md5 mittlerweile nichts mehr taugt, dank den Nvidia GPUs und deren OpenSource-Treiber, siehe dazu für die Anwendungen im botnet einfach auf plain-text.info nach

Link zu md5 on GPUs (naja, einer von vielen): http://majuric.org/software/cudamd5/

Grüßel,
Unsk1ll3d
Mit Zitat antworten
  #9 (permalink)  
Alt 15.08.2008, 16:32
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.956
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von Unsk1ll3d Beitrag anzeigen
Ist $_COOKIE nicht von register_globals abhängig?
Nein.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Cookie lesen, zu kompliziert! cavebird Serveradministration und serverseitige Scripte 14 01.12.2009 12:25
Problem mit dem Positionieren der Login Div Cybertronic CSS 26 06.10.2009 21:51
SESSION / COOKIE - Konflikte poppihasi Serveradministration und serverseitige Scripte 1 23.12.2007 13:29
Cookie für Login mooonshadow Serveradministration und serverseitige Scripte 5 25.09.2006 15:09
Gesetzen Cookie sofort erkennen? psycho_dmr Serveradministration und serverseitige Scripte 7 26.04.2006 18:46


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:31 Uhr.