einfaches login-script mit cookies

  • PHP

  • happy_neo
  • 3089 Aufrufe 23 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • einfaches login-script mit cookies

    hey leute,

    ich bin auf der such nach einem ganz einfachem login-system. es soll auf der startseite einfach nur ein passwort eigegeben werden und das wars. am besten wäre, wenn man noch ein hacken für cookies setzten kann. könnt ihr mir da weiterhelfen?

    viele grüße
    happy_neo
    [SIZE="1"]ip-verteilung: #1 | #2 | #3 | #4 | #5 | #6 | #7 | #8 | #9 | #10 | #11 | #12 | #13 | #14[/SIZE]
    [SIZE="1"]upload: #1[/SIZE]
  • @raveshow: wow, also sogenau kenne ich mich damit auch nicht aus...

    ich habe ein website die eigentlich nur für meinen freundeskreis bestimmt ist. d.h. ich will die seite mit einem simplen login schützen... siehe hier (gockelranch.de/). nur möchte ich, dass die leute sich nicht immer mit dem passwort anmelden müssen, sondern cookies setzen können. im beispiel fehlt das noch

    ... soetwas also suche ich.... h4rm0ny wollte irgendwie helfen, aber er meldet sich nicht mehr

    hoffe ihr könnt weiterhelfen.
    viel grüße
    happy_neo
  • ok, poste heute abende die entsprchenden scripte... komme gerade nicht ran, bin gerade unterwegs. es sind glaube ich ein login.php und eine author.php oder so.

    bis heute abend.
    viele grüße
    happy_neo

    also, dass ist was ich bisher habe...

    hierbei wird eine seite geschützt:
    > ich logge mich mit benutzername und passwort ein
    > anschließen logge ich mich wieder aus

    die login.php

    PHP-Quellcode

    1. <?php
    2. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    3. session_start();
    4. $username = $_POST['username'];
    5. $passwort = $_POST['passwort'];
    6. $hostname = $_SERVER['HTTP_HOST'];
    7. $path = dirname($_SERVER['PHP_SELF']);
    8. // Benutzername und Passwort werden überprüft
    9. if ($username == 'xxxxx' && $passwort == 'xxxxx') {
    10. $_SESSION['angemeldet'] = true;
    11. // Weiterleitung zur geschützten Startseite
    12. if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
    13. if (php_sapi_name() == 'cgi') {
    14. header('Status: 303 See Other');
    15. }
    16. else {
    17. header('HTTP/1.1 303 See Other');
    18. }
    19. }
    20. header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/xxxx.php');
    21. exit;
    22. }
    23. }
    24. ?>
    25. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    26. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
    27. <head>
    28. <title>xxxxx xxxxx | XXXXX</title>
    29. <style type="text/css">
    30. <!--
    31. .button {
    32. border: 1px solid;
    33. }
    34. .vorname { width: 148px;
    35. font-family: Arial, Helvetica, sans-serif;
    36. font-size: 12px;
    37. border: 1px solid #aaaaaa;
    38. }
    39. .Stil3 {font-family: Arial, Helvetica, sans-serif; font-size: small; color: #FFFFFF; }
    40. .Stil4 {font-size: small; font-family: Arial, Helvetica, sans-serif;}
    41. .Stil6 {font-size: small; font-family: Arial, Helvetica, sans-serif; color: #666666; }
    42. .Stil7 {font-size: small; font-family: Arial, Helvetica, sans-serif; color: #666666; font-weight: bold; }
    43. .Stil8 {
    44. font-size: larger;
    45. font-family: Arial, Helvetica, sans-serif;
    46. font-weight: bold;
    47. color: #666666;
    48. }
    49. .Stil10 {
    50. font-size: 10px;
    51. color: #aaaaaa;
    52. font-family: Arial, Helvetica, sans-serif;
    53. }
    54. -->
    55. </style>
    56. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /></head>
    57. <body>
    58. <form action="login.php" method="post">
    59. <p>&nbsp;</p>
    60. <p>&nbsp;</p>
    61. <table width="550" height="304" border="0" align="center" background="http://www.xxxxx.xxx/xxxxx">
    62. <tr>
    63. <td><p>&nbsp;</p>
    64. <p>&nbsp;</p>
    65. <p align="center" class="Stil8">XXXXX</p>
    66. <p align="center" class="Stil8">&nbsp;</p>
    67. <table width="253" border="0" align="center" cellspacing="0">
    68. <tr>
    69. <td width="99" class="Stil6"><div align="right">xxxxx:</div></td>
    70. <td width="144"><div align="right" class="Stil3">
    71. <input name="username" type="text" class="xxxxx" />
    72. </div></td>
    73. </tr>
    74. <tr>
    75. <td class="Stil6"><div align="right">xxxxx:</div></td>
    76. <td><div align="right" class="Stil3"><input name="passwort" type="password" class="xxxxx" />
    77. </div></td>
    78. </tr>
    79. <tr>
    80. <td colspan="2"><div align="center" class="Stil4">
    81. <table width="231" border="0">
    82. <tr>
    83. <td>&nbsp;</td>
    84. </tr>
    85. </table>
    86. <input name="submit" type="submit" class="xxxxx" value="login" />
    87. </div></td>
    88. </tr>
    89. </table></td>
    90. </tr>
    91. </table>
    92. <p align="center" class="Stil10">&copy; xxx xx xxxxx.xx </p>
    93. </form>
    94. </body>
    95. </html>
    Alles anzeigen


    die logout.php

    PHP-Quellcode

    1. <?php
    2. session_start();
    3. session_destroy();
    4. $hostname = $_SERVER['HTTP_HOST'];
    5. $path = dirname($_SERVER['PHP_SELF']);
    6. header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/login.php');
    7. ?>


    die auth.php

    PHP-Quellcode

    1. <?php
    2. session_start();
    3. $hostname = $_SERVER['HTTP_HOST'];
    4. $path = dirname($_SERVER['PHP_SELF']);
    5. if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
    6. header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/xxxx.php');
    7. exit;
    8. }
    9. ?>
    Alles anzeigen


    und in der seite, die geschützt wird, steht folgendes:

    PHP-Quellcode

    1. <?php include('auth.php'); ?>


    hoffe ihr könnt etwas damit anfangen. nochmal für alle: ziel ist es, dass ich nur noch ein passwort eingeben muss und cookies setzen kann, damit die user nicht immer das pw eingeben müssen (hier ein beispiel, allerdings fehlt die cookie-funktion: gockelranch.de)

    hoffe ihr könnt mir helfen.
    viele grüße
    happy_neo

    hattet ihr nicht gesagt, ihr könnt das "schnell" und "einfach" überarbeiten? oder klappt es doch nicht?

    grüße
    happy_neo
  • Oh man, Geduld ist eine Tugend und ein Trippel-Post macht dich bei MeX nicht gerade beliebt oO

    Also als erstes editierste den ersten PHP CODE über dem LogIn mit:

    PHP-Quellcode

    1. <?php
    2. $hostname = $_SERVER['HTTP_HOST'];
    3. $path = dirname($_SERVER['PHP_SELF']);
    4. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    5. session_start();
    6. $username = $_POST['username'];
    7. $passwort = $_POST['passwort'];
    8. // Benutzername und Passwort werden überprüft
    9. if ($username == 'xxxxx' && $passwort == 'xxxxx') {
    10. $_SESSION['angemeldet'] = true;
    11. if(isset($_POST['usecookie'])) setcookie('001122',md5($passwort.'X'.$username),time()+3600); //hält ne stunde
    12. // Weiterleitung zur geschützten Startseite
    13. if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
    14. if (php_sapi_name() == 'cgi') {
    15. header('Status: 303 See Other');
    16. }
    17. else {
    18. header('HTTP/1.1 303 See Other');
    19. }
    20. }
    21. header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/xxxx.php');
    22. exit;
    23. }
    24. }
    25. elseif(isset($_COOKIE['001122'])) {
    26. if($_COOKIE['001122'] == md5('passwortXuser')) {
    27. session_start();
    28. $_SESSION['angemeldet'] = true;
    29. header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/xxxx.php');
    30. exit();
    31. }
    32. }
    33. ?>
    Alles anzeigen

    User und passwort musst natürlich noch verändern ;)


    Danach HTML CODE am besten unter

    Quellcode

    1. <tr>
    2. <td class="Stil6"><div align="right">xxxxx:</div></td>
    3. <td><div align="right" class="Stil3"><input name="passwort" type="password" class="xxxxx" />
    4. </div></td>
    5. </tr>

    Das hier einfügen:

    Quellcode

    1. <tr>
    2. <td class="Stil6"><div align="right">Cookies benutzen:</div></td>
    3. <td><div align="right" class="Stil3"><input name="usecookie" type="checkbox" value="1" checked ="checked"/>
    4. </div></td>
    5. </tr>


    Gruß
    Broken Sword
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.
  • @broken sword: ja sorry, bin ein bisschen ungeduldig gewesen. nimms mir bitte nicht böse.
    vielen dank für deine hilfe.

    allerdings funktioniert das noch nicht so ganz...

    1.) wenn ich nichts eingebe und nur auf login klicke, dann kommt folgendes:

    PHP-Quellcode

    1. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/login.php:1) in /home/www/login.php on line 5


    2.) wenn ich die richtigen daten eintippe, also richtiger benutzername und username, dann kommt folgende meldung:

    PHP-Quellcode

    1. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/login.php:1) in /home/www/login.php on line 5
    2. Warning: Cannot modify header information - headers already sent by (output started at /home/www/login.php:1) in /home/www/login.php on line 21
    3. Warning: Cannot modify header information - headers already sent by (output started at /home/www/login.php:1) in /home/www/login.php on line 25


    3.) in der login.php steht etwas von "//hält ne stunde". heißt das, die cookies werden nur für eine stunde gespeichert?

    4.) ist es möglich das man nur ein pw eingeben muss, ohne benutzername? so wie im beispiel: gockelranch.de

    danke dir auf jeden fall für deine unterstützung, hoffe du bist mir fürs ungeduldigsein nicht böse...

    grüße
    happy_neo
  • session start muss immer als erstes im script ausgeführt werden -> sprich vor jedlicher Ausgabe! Am besten gleich nach <?php in deiner PHP-Seite! Und nur einaml pro Script! Nicht mehrmals aufrufen!

    PHP-Quellcode

    1. elseif(isset($_COOKIE['001122'])) {
    2. if($_COOKIE['001122'] == md5('passwortXuser')) {
    3. //session_start(); --> diese Zeile entfernen!
    4. $_SESSION['angemeldet'] = true;
    5. header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/xxxx.php');
    6. exit();
    7. }
    8. }
  • hier die login.php

    PHP-Quellcode

    1. <?php
    2. $hostname = $_SERVER['HTTP_HOST'];
    3. $path = dirname($_SERVER['PHP_SELF']);
    4. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    5. session_start();
    6. $username = $_POST['username'];
    7. $passwort = $_POST['passwort'];
    8. // Benutzername und Passwort werden überprüft
    9. if ($username == 'test' && $passwort == 'test123') {
    10. $_SESSION['angemeldet'] = true;
    11. if(isset($_POST['usecookie'])) setcookie('001122',md5($passwort.'X'.$username),time()+3600); //hält ne stunde
    12. // Weiterleitung zur geschützten Startseite
    13. if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
    14. if (php_sapi_name() == 'cgi') {
    15. header('Status: 303 See Other');
    16. }
    17. else {
    18. header('HTTP/1.1 303 See Other');
    19. }
    20. }
    21. header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/xxxx.php');
    22. exit;
    23. }
    24. }
    25. elseif(isset($_COOKIE['001122'])) {
    26. if($_COOKIE['001122'] == md5('passwortXuser')) {
    27. $_SESSION['angemeldet'] = true;
    28. header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/xxxx.php');
    29. exit();
    30. }
    31. }
    32. ?>
    Alles anzeigen


    und hier die fehlermeldung:

    HTML-Quellcode

    1. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/login.php:1) in /home/www/login.php on line 5
    2. Warning: Cannot modify header information - headers already sent by (output started at /home/www/login.php:1) in /home/www/login.php on line 21
    3. Warning: Cannot modify header information - headers already sent by (output started at /home/www/login.php:1) in /home/www/login.php on line 25


    > habe gesehen, wenn ich die seite dann aktualisiere, dann bin ich eingeloggt...

    grüße
    happy_neo
  • try this:

    PHP-Quellcode

    1. <?php
    2. //session start
    3. session_start();
    4. $hostname = $_SERVER['HTTP_HOST'];
    5. $path = dirname($_SERVER['PHP_SELF']);
    6. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    7. $username = $_POST['username'];
    8. $passwort = $_POST['passwort'];
    9. // Benutzername und Passwort werden überprüft
    10. if ($username == 'test' && $passwort == 'test') {
    11. $_SESSION['angemeldet'] = true;
    12. if(isset($_POST['usecookie'])) {
    13. setcookie('001122',md5($passwort.'X'.$username),time()+3600); //hält ne stunde
    14. }
    15. // Weiterleitung zur geschützten Startseite
    16. header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/xxxx.php');
    17. exit;
    18. } else {
    19. echo 'Username oder Passwort falsch!';
    20. }
    21. } else if(isset($_COOKIE['001122'])) {
    22. if($_COOKIE['001122'] == md5('passwortXuser')) {
    23. $_SESSION['angemeldet'] = true;
    24. header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/xxxx.php'); //hier das geschützte File angeben!
    25. exit();
    26. }
    27. }
    28. ?>
    Alles anzeigen
  • wenn ich jetzt die geschützte startseite öffne, um mich anzumelden, erscheint sofort folgende fehlermeldung:

    HTML-Quellcode

    1. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/login.php:1) in /home/www/login.php on line 4


    will ich mich dann einloggen und gebe benutzername und pw an erscheinen folgende meldungen:

    HTML-Quellcode

    1. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/www/login.php:1) in /home/www/login.php on line 4
    2. Warning: Cannot modify header information - headers already sent by (output started at /home/www/login.php:1) in /home/www/login.php on line 21
  • index.php

    PHP-Quellcode

    1. <?php
    2. // Pruefen ob der Browser Cookies akzeptiert
    3. if(isset($_COOKIE['browser_check'])) {
    4. $browser_check = true;
    5. }elseif($_GET['check'] != 1) {
    6. @setcookie("browser_check","set",time()+3600);
    7. header("Location: index.php?check=1");
    8. }
    9. include("inc.php");
    10. // Wenn $_GET['logout'] gesetzt ist dann loesche $_SESSION['success']
    11. if(isset($_GET['logout'])) {
    12. // Wenn $_COOKIE['login_cookie'] gesetzt ist dann loesche Cookie
    13. if(isset($_COOKIE['login_cookie'])) @setcookie("login_cookie",0,time()-3600);
    14. // Loesche SESSION['success']
    15. unset($_SESSION['success']);
    16. //Leite weiter zur index.php
    17. header("Location: index.php");
    18. }
    19. // Wenn $_COOKIE['login_cookie'] gesetzt ist dann ueberpruefe den Inhalt und fuehre ggf. den auto login aus
    20. if(isset($_COOKIE['login_cookie']) AND !isset($_POST['sender']) AND !isset($_GET['logout'])) {
    21. // Hole den Inhalt aus dem Cookie
    22. $cookie_inhalt = $_COOKIE['login_cookie'];
    23. // Trenne benutzername und kennwort anhand des Trennzeichens @
    24. $cookie_inhalt = explode("@",$cookie_inhalt);
    25. // Gehe mit Cookiedaten in die login funktion
    26. login($cookie_inhalt[0],$cookie_inhalt[1],1,2);
    27. }
    28. // Wenn Sumbit gepostet wurde
    29. if(isset($_POST['sender'])) {
    30. // Wenn Cookie setzen "aktiv"
    31. if($_POST['co'] == 'on') {
    32. if(login($_POST['username'],$_POST['password']) == false) {
    33. echo "Sry da hat was nicht geklappt";
    34. }
    35. }else {
    36. if(login($_POST['username'],$_POST['password'],2,1) == false) {
    37. echo "Sry da hat was nicht geklappt";
    38. }
    39. }
    40. }
    41. ?>
    42. <html>
    43. <head>
    44. <title>test</title>
    45. </head>
    46. <body bgcolor="#FFFFFF" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" >
    47. <?php
    48. if(isset($_SESSION['success'])) {
    49. echo "drin<br><a href='index.php?logout=true'>Logout</a>";
    50. }else {
    51. ?>
    52. <form target="_self" method="post" name="main">
    53. <?php if(!isset($browser_check)) echo "Ihr Browser akzeptiert keine Cookies, daher wird dieses Feld deaktiviert<br><br>"; ?>
    54. User : <input type="text" name="username"><br>
    55. Pass : <input type="text" name="password"><br>
    56. Cookie (ja/nein) : <input type="checkbox" name="co" <?php if(!isset($browser_check)) echo "disabled";?>><br>
    57. <input type="submit" name="sender">
    58. </form>
    59. <?php } ?>
    60. </body>
    61. </html>
    Alles anzeigen


    inc.php

    PHP-Quellcode

    1. <?php
    2. @session_start();
    3. @mysql_connect("HOST","USER","PASS");
    4. @mysql_select_db("DB");
    5. function check_string($string) {
    6. // erlaubte zeichen a-z,A-Z,0-9,-,_
    7. if((preg_match('/^[a-zA-Z0-9\-\_]+$/',$string))) return true;
    8. return false;
    9. }
    10. function login($benutzername,$kennwort,$modus=1,$cookie_gelesen=1) {
    11. // ############# Konfiguration start #############
    12. // ### Cookies ###
    13. // Name des Cookies
    14. $conf['cookie_name'] = "login_cookie";
    15. // Ablaufzeit des Cookies (1 Monat)
    16. $conf['cookie_zeit'] = time()+3600*24*7*4;
    17. // Inhalt des Cookies (Wird im spaeterem Verlauf festgelegt)
    18. $conf['cookie_inhalt'] = "";
    19. // ### Sonstiges ###
    20. // Modus ( 1 = Session und Cookie setzen / 2 = Session ohne Cookie setzen )
    21. $conf['modus'] = $modus;
    22. // CookieSet ( 1 = Benutzername und Kennwort sind nicht aus einem Cookie entnommen / <1 = Benutzername und Kennwort sind einem Cookie entnommen somit ist das Kennwort schon verschluesselt )
    23. $conf['cookie_gelesen'] = $cookie_gelesen;
    24. // ### Variablen ###
    25. // Benutzername
    26. $vars['benutzername'] = htmlspecialchars(trim($benutzername));
    27. // Kennwort
    28. $vars['kennwort'] = htmlspecialchars(trim($kennwort));
    29. // ############# Konfiguration ende #############
    30. // Ist der Benutzername oder das Kennwort "leer" oder sind ungueltige Zeichen im String dann gib ein false wert zurueck
    31. if(strlen($vars['benutzername']) == 0 OR strlen($vars['kennwort']) == 0 OR !check_string($vars['benutzername']) OR !check_string($vars['kennwort'])) {
    32. return false;
    33. }else {
    34. // Ist das Kennwort NICHT aus einem Cookie dann muss es mit md5 verschluesselt bzw. verhasht werden
    35. if($conf['cookie_gelesen'] == 1) {
    36. $vars['kennwort'] = md5($vars['kennwort']);
    37. }
    38. // SQL Abfrage ob benutzername und kennwort gleich den in der Datenbank sind
    39. $sql = @mysql_query("SELECT benutzer_id FROM tbl_benutzer WHERE benutzername = '".$vars['benutzername']."' AND kennwort = '".$vars['kennwort']."' ");
    40. // Ist die Abfrage erfolgreich dann check den Modus
    41. if(@mysql_num_rows($sql) == 1) {
    42. if($conf['modus'] == 1) {
    43. // Cookie Inhalt wird aus benutzername@kennwort zusammengebaut
    44. $conf['cookie_inhalt'] = $vars['benutzername']."@".$vars['kennwort'];
    45. // Cookie wird gesetzt
    46. @setcookie($conf['cookie_name'],$conf['cookie_inhalt'],$conf['cookie_zeit']);
    47. // Session für den login wird gesetzt
    48. $_SESSION['success'] = true;
    49. return true;
    50. }else {
    51. // Session für den login wird gesetzt
    52. $_SESSION['success'] = true;
    53. return true;
    54. }
    55. }else {
    56. // SQL Abfrage hat nicht geklappt
    57. return false;
    58. }
    59. }
    60. }
    Alles anzeigen


    Nicht selbstgeschrieben!!! GOOGLE ;)
    aber ist ohne cookies! Cookies kann man ausnutzen wenn man weiß wie ;)
    Judenverfolgung, Inquisitionen, Kreuzigungen,
    Hexenverbrennung, wir wissen wie man feiert
    - Ihre Kirche †
    Blacklist
  • @c-r-k

    erst mal vielen dank für deine hilfe. allerdings funktioniert es noch nicht so richtig... weiß auch nicht woran das liegt...
    kannst du mir weiterhelfen? wenn ich die richtigen login-daten eingebe, dann passiert nichts (bzw. es kommt eben die fehlermeldung: Sry da hat was nicht geklappt).

    weißt du woran das liegt?

    grüße
    happy_neo
  • ich habe jetzt eine php-methode gefunden, mit der ich meine homepage schützen kann. allerdings gibt es noch ein kleines problem. ich benutze ein fertiges gästebuch (von wortlab - burningbook). dies soll natürlch auch geschützt werden, damit man auch nicht mit dem direkten link den schutz umgehen kann.
    nun nutze ich folgenden code für jede seite, die geschützt werden soll:

    PHP-Quellcode

    1. <?php
    2. if($_SESSION['login'] == 1 or $_COOKIE['logged'] == 1) {
    3. ?>
    4. <!--HIER DER HTML CODE-->
    5. <?php
    6. }
    7. else header("Location: index.php");
    8. ?>


    allerdings bekomme ich bei einer seite (handel sich um mein gästebuch) folgende fehlermeldung:

    Quellcode

    1. Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/www/burningbook/index.php(127) : eval()'d code on line 2


    bei jeder anderen seite, bei dem ich den o.g. benutze funktioniert es...

    könnt ihr mir weiterhelfen

    viele grüße

    happy_neo