[PHP] Login mit Session

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Freakzone, 20. April 2009 .

Schlagworte:
  1. 20. April 2009
    Login mit Session

    Hallo liebe RR'ler,

    wie ich in anderen Threads schon erwähnt hatte, habe ich grad so ein bisschen mit PHP und MySQL angefangen. Ich habe mich da so ein bisschen reingelesen und versucht mir die ganze Geschichte über verschiedene Websites selbst anzueignen. Nun habe ich mir auch schon eine Website erstellt und diese läuft bisher eigentlich auch ziemlich gut. Ich gebe News und Termine aus, habe mir dort für Löschscripts geschrieben, eine Shoutbox eingefügt, die über die Datenbank läuft, Rechtevergabe und und und...

    Nur ein Problem habe ich an der ganzen Sache. Und das ist mein Login. Ich habe mich dafür entscheiden das mit Sessions umzusetzen, dafür habe ich mir wieder verschiedene Websites angeschaut wo es beschrieben war. Mein Problem ist immer nur, dass ich mir eine möglichst einfache Lösung suche, wo ich auch schnell durch das Script durchsteige weil ich es verstehen und nicht nur mit Copy&Paste arbeiten möchte.
    Ich denke mal ich zeige euch dann einfach mal Ausschnitte wie es bei mir bis jetzt steht, ich denke mal da ist noch so einiges falsch, sonst würde es ja normal laufen...mein konkretes Problem ist nur, dass wenn man eingeloggt ist, man nach ungefähr 2-5 Minuten Inaktivität ausgeloggt wird. Das geht einem dann schon ziemlich aufn Zeiger wenn man grade News schreibt, das abschicken will und dann ne Meldung kommt "Bitte einloggen" xD


    Mein Login-Formular:

    Code:
    <form name="login" action="login1.php" method="post">
    <table>
    <tr>
    <td>Username:</td>
    <td><input type="text" name="user"></td>
    </tr>
    <td>Passwort:</td>
    <td><input type="password" name="passwort"></td>
    </tr>
    </table>
    <br><br>
    
    <input type="submit" value="einloggen">
    </form>


    Login1 (Daten werden geprüft, Session angemeldet und ggf weitergeleitet):

    PHP:
    <? php
    include( "dbconnect.php" );
    ?>
    <?php
    session_start
    ();
    ?> 
    <html>
    <head>
    <link href="style.css" rel="stylesheet" type="text/css">

    <?php

      $username 
    $_POST [ "user" ];
      
    $passwort  md5 ( $_POST [ "passwort" ]);

      
    $abfrage  "SELECT username, pass FROM User WHERE username LIKE ' $username ' LIMIT 1" ;
      
    $ergebnis  mysql_query ( $abfrage );
      
    $row  mysql_fetch_object ( $ergebnis );

      if(
    $row -> pass  ==  $passwort )
        {
        
    $_SESSION [ "username" ] =  $username ;
         
    Header ( "Location: index.php" );
         exit(); 
        }
       else
         {
          echo 
    "Benutzername und/oder Passwort waren falsch. <br> <a href='login.php'>Login</a>" ;
         }

    ?>
    </head>


    <body>


    </body>
    </html>


    Auf jeder Seite steht dann dieser Auszug um zur einen die Session zu erneuern und die Überprüfung:

    PHP:
    <? php
    session_start
    ();
    ?>
    <html>
    <head>
    <title>Titel der HP</title>
    <link href="style.css" rel="stylesheet" type="text/css">

    <?php

      
    if(!isset( $_SESSION [ "username" ]))
        {
         echo 
    "Bitte <a href='login.php'>einloggen</a>" ;
         exit;
        }

    ?>


    .....


    Und ich bin schon völlig am verzweifeln xD
    Jetzt lese ich immer wieder ich kann in der php.ini oder so die Lifetime verlängern/festlegen. Das Problem ist, dass ich nen Funpic-Server habe und somit gar nicht an die PHP-Config rankomme. Ich kanns mir zwar anschauen aber nicht wirklich viel ändern.

    Ich hab auch schon n bissle was probiert iwie mit "session_cache_limiter" oder so alles mögliche. Dann wurde mir zwar die "neue Lifetime", die ich gesetzt hatte richtig ausgegeben aber das Problem bestand noch immer ^^
    Bitte helft mir, was mach ich denn nun ?? xD


    Hab mir im Moment so ausgeholfen, dass ich nen kleines Fenster im Hintergrund öffne, das alle 10 Sekunden refresht und somit session_start() immer wieder mit aufruft und das funktioniert soweit dann auch. Aber das kann doch keine endgültige Lösung sein ^^
     
  2. 20. April 2009
    AW: Login mit Session

    ich hab das auch schonmal mit nem funpic server probiert und bin verzweifelt. soweit ich weiss (inzwischen) liegt das am Server von funpic. die haben die lifetime festgesetzt. ich hatte auch keine möglichkeit diese zu ändern. also entweder -> direkt den eingenen server mieten, oder cookies verwenden (oder so tun, als wenn man die lifetime geändert hätte,was man dann ja später machen kann)...
     
  3. 20. April 2009
    AW: Login mit Session

    Wie lange ist denn die lifetime? Kannst in der phpinfo(); ablesen.

    Außerdem ist dein Login unsicher, siehe SQL-Injection .
    Ich persönlich würde auch Passwort in die SQL-Abfrage schreiben, dann kannst du mit num_rows überprüfen, ob es einen Treffer erzielt.
     
  4. 20. April 2009
    AW: Login mit Session

    Wenn du keinen Zugriff auf die Configs hast, dann sehe ich auch keinen andere Möglichkeit, außer mit Workarounds auszuhelfen.
    Allerdings würde ich statt des Fensters 'einfach' nen AJAX-Request zu deinem Server senden. Der kann dann ja einfach 'ins Leere' laufen. Guck dir dbzgl. einfach mal den PeriodicalUpdater von Prototype an. Der übernimmt gleich das Intevall-Handling für dich .

    MFG Chronos
     
  5. 21. April 2009
    AW: Login mit Session

    Code:
    session
    Session Support enabled
    Registered save handlers files user
    Registered serializer handlers php php_binary
    
    Directive Local Value Master Value
    session.auto_start Off Off
    session.bug_compat_42 On On
    session.bug_compat_warn On On
    session.cache_expire 180 180
    session.cache_limiter nocache nocache
    session.cookie_domain no value no value
    session.cookie_httponly Off Off
    session.cookie_lifetime 3600 3600
    session.cookie_path / /
    session.cookie_secure Off Off
    session.entropy_file no value no value
    session.entropy_length 0 0
    session.gc_divisor 100 100
    session.gc_maxlifetime 1200 1200
    session.gc_probability 0 0
    session.hash_bits_per_character 4 4
    session.hash_function 0 0
    session.name PHPSESSID PHPSESSID
    session.referer_check no value no value
    session.save_handler files files
    session.save_path /usr/export/tmp /usr/export/tmp
    session.serialize_handler php php
    session.use_cookies On On
    session.use_only_cookies Off Off
    session.use_trans_sid 0 0

    Da einmal der Auszug von Funpic zu Sessions.




    Tut mir Leid aber das verstehe ich noch nicht ganz
    Bin entweder noch zu neu in dem Themengebiet oder es ist zu spät
     
  6. 21. April 2009
    AW: Login mit Session

    Wenn ich mich nicht irre ist session.gc_maxlifetime dafür zuständig, wie lange eine Session ohne neues session_start(); "lebt". Bei dir müsste eine Session momentan 1200 Sekunden (also 20 Minuten) beibehalten werden.
    Das solltest du eigentlich über ini_set ändern können, wenn du sie länger behalten willst.

    Ist in deinem Script vielleicht ein Teil, der ausversehen die Sessions löscht o.Ä.? So wie das aussieht liegt es nicht an den Servereinstellungen.

    Egal wie weit du bei PHP bist, lesen wirst du wohl können, deshalb habe ich dir den Wikipedia-Link gleich mitgepostet ^__^
    PHP:
    $username  $_POST [ "user" ];
    $abfrage  "SELECT username, pass FROM User WHERE username LIKE ' $username ' LIMIT 1" ; // unsicher
    $abfrage  "SELECT username, pass FROM User WHERE username LIKE '" . mysql_real_escape_string ( $username ). "' LIMIT 1" // sicherer
    Siehe auch mysql_real_escape_string besonders Beispiel #2.
     
  7. 21. April 2009
    AW: Login mit Session

    zu SQL-Injection:
    is sehr angenehm wenn dus einfach in ne funktion reinpackst .. sparst du dir schreibarbeit

    //SQL Injection
    function sql($string) {
    return mysql_real_escape_string($string);
    }
     
  8. 22. April 2009
    AW: Login mit Session


    Jo SQL-Injection kenn ich

    Aber ich meinte ich steig nicht so ganz durch wie du das meinst wie ich den Login sicherer gestalten kann ^^
    Jetzt wo du den Code dazu gepostet hast versteh ich es , vielen Dank dafür auf jeden Fall :]
    BW ist damit auch schonmal raus.



    Hmm und eigentlich dürfte kein Teil in irgendeinem Script auf der Seite die Session beeinflusssen weil ich diese wirklich nur auf jeder Seite mit session_start(); berühre. Ich lade zwar alle Seiten über neue Fenster, die eine kleinere größe haben und keine menüleiste und so aber die eigentliche Seite bleibt immer offen und in jedem aufgepoptem Fenster steht halt session_start();
    Erst bei der Logout-Page wird die session zerstört und die Daten gelöscht. Deswegen frage ich mich halt woran das liegen kann weil wenn ich die erwähnte Seite, die sich alle 10 Sekunden refresht aufhabe, dann funzt es ja ^^

    Zur ini:

    Was müsste ich denn genau dort hineinschreiben, denke ja mal das würde auf die maxlifetime hinauslaufen. Aber wenn diese bei 20 Minuten liegt kann es ja nicht sein, dass man teilweise schon nach 1-2 Minuten ausgeloggt wird.
     
  9. 22. April 2009
    AW: Login mit Session

    Versuch es mal mit
    PHP:
    $zeit  60  3 // 3 Minuten => 3*60 Sekunden
    ini_set ( "session.gc_maxlifetime" $zeit );
    und schau, ob er dann nach 3 Minuten (Stoppuhr zur Hand nehmen) die Session löscht und probier es auch mal mit größeren Werten. Da ich so ein Problem noch nie hatte wüsste ich keinen anderen Lösungsansatz.

    Google hast du schon ausgiebig zu Rate gezogen, nehme ich an.
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.