[PHP] Session-basierter Adminlogin/Controllpanel ohne Datenbank

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Cosmopolit, 29. Dezember 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 29. Dezember 2009
    Session-basierter Adminlogin/Controllpanel ohne Datenbank

    Hallo allerseits,

    kann mir einer via PHP ein Admin-Login programmieren?

    Das soll vollgendermaßen aussehen:


    Passwort im Quellqode vordefiniert
    Input -> Benutzername
    Input -> Passwort
    Button -> einloggen

    Und wenn ich mich dann einlogge, soll kommen:

    Button -> ausloggen

    Es soll kein MySQL verwendet werden, alles nur via PHP, ob man das nun mit einer externen PHP Datei macht, oder in der HTML eingebunden, hauptsache das funktioniert.


    Ich wäre für diese Hilfe sehr sehr dankbar. (BW ist selbstverständlich)


    Freundliche Grüße

    Cosmopolit
     
  2. 29. Dezember 2009
    AW: Admin Login

    Überarbeitet.. Dateiname der Datei egal.

    PHP:
    <? php
    session_start
    ();

    ob_start ();

    $user = '1' // Dein Username
    $pw = '2' ;   // Dein Passwort



    if( $_GET [ 'action' ]== 'logout' ){
    session_destroy ();
    header ( 'Location:' . $_SERVER [ 'PHP_SELF' ]. '' );
    }

    if(!isset(
    $_SESSION [ 'login' ])){
    echo 
    '<form action="' . $_SERVER [ 'PHP_SELF' ]. '" method="POST">
    <b>Username:</b><input type="text" name="user" ><br />
    <b>Passwort:</b><input type="password" name="pass">
    <input type="submit" name="do_login" value="true">
    </form>'
    ;
    }

    if(isset(
    $_POST [ 'do_login' ]) &&  $_POST [ 'do_login' ]== 'true'  && !isset( $_SESSION [ 'login' ])){
          if(
    $_POST [ 'pass' ]== $pw  &&  $_POST [ 'user' ]== $user ){
          
    $_SESSION [ 'login' ]= 'set' ;
          
    header ( 'Location:' . $_SERVER [ 'PHP_SELF' ]. '' );
          }
        
    }else if (isset(
    $_SESSION [ 'login' ])){

    //Methode eins
    echo  'Das ist eine Testseite<br />' ;
    echo 
    '<a href="' . $_SERVER [ 'PHP_SELF' ]. '?action=logout">Abmelden</a>' ;


    //Methode Zwei bei nichtgefallen die beiden zeilen löschen ansonsten die beiden oben.
    header ( 'Location:' seite auf  die  weiter geleitet werden soll . php ');

    }



    ob_flush();
    ?> 


    Für Methode2: "seite auf die weiter geleitet werden soll.php"
    PHP:
    <? php
    session_start
    ();

    if(isset(
    $_SESSION [ 'login' ])){
    echo 
    'Das ist eine komplett leere Testseite<br />' ;
    echo 
    '<a href=' namederdateivomlogin . php ? action = logout ">Abmelden</a>';
    }
    ?>
    Soo das wäre mal so ein kleines Beispiel von mir. Wenn du was richtig komplettes haben möchtest, such aber lieber den "Ich suche ein Coder Thread aufsuchen."
     
  3. 30. Dezember 2009
    AW: Admin Login

    Erst ein mal vielen Dank.

    Genau ich suche etwas komplettes, ich dachte hier würde ich vllt die Hilfe auf Anfrage bekommen.
    Leider habe ich nichts außer Bewertungen zu geben, deswegen kann ich nicht nach Coder fragen.


    Ich versuch es Anhand deines Quellqodes, weil eigentlich ist da alles drinn was ich benötige, soll keine Grafik oder so richtig ausgeben, nur die wenigen Funktionen.

    Wo in deinem oberen Teil ist das Passwort festgelegt bzw. kann ich es festlegen, kannst du mir vllt. noch bei dieser Frage helfen?


    Bin dir aber auch jetzt schon sehr Dankbar für die Hilfe.
     
  4. 30. Dezember 2009
    AW: Admin Login

     
  5. 30. Dezember 2009
    AW: Admin Login

    Richtig genau die beiden Variablen $pw und $user.



    Ich bin heut mal so sozial.. ^^ Ich kann dir das ja mal erklären wenn du willst:
    Spoiler
    Also wir arbeiten mit Sessions..Verwandt mit den Cookies. Dort speichern wir wichtige informationen. Ganz am anfang starten wir die session mit session_start();

    Danach legen wir Password und Username fest per $pw und $user.

    In dem Part:
    PHP:
    if(!isset( $_SESSION [ 'login' ])){
    echo 
    '<form action="login.php" method="POST">
    <input type="text" name="user" >
    <input type="password" name="pass">
    <input type="submit" name="do_login" value="true">
    </form>'
    ;
    }

    wird nun abgefragt ob die Session login existiert. Tut sie es nicht, wird man aufgefordert sich einzuloggen. Ist man eingeloggt, wird das ganze nicht gezeigt.


    PHP:
    if(isset( $_POST [ 'do_login' ]) &&  $_POST [ 'do_login' ]== 'true'  && !isset( $_SESSION [ 'login' ])){
          if(
    $_POST [ 'pass' ]== $pw  &&  $_POST [ 'user' ]== $user ){
          
    $_SESSION [ 'login' ]= 'set' ;
          
    header ( 'Location:' . $_SERVER [ 'PHP_SELF' ]. '' );
          }else if (isset(
    $_SESSION [ 'login' ])){
    echo 
    'Das ist eine Testseite<br />' ;
    echo 
    '<a href="' . $_SERVER [ 'PHP_SELF' ]. '?action=logout">Abmelden</a>' ;
    }

    Nun hier fragen wir erstmal ob das Formular abgeschickt wurde und ob sich denn auch noch keiner eingeloggt ist. Ist das der Fall, fragen wir ob denn auch das eingegebene Passwort und der Username mit unseren Vorgaben übereinstimmen. Ist das der Fall erstellen wir uns ein merkmal, dass wir erflogreich eingeloggt sind. (Damit wir den Adminbereich ggf. auf mehr als nur eine seite ausweiten können) Danach leiten wir uns auf die Seite zurück damit wir in den Admin-Bereich kommen.

    Nun greift der else if (falls nicht) Fall ein. Sind wir schon eingeloggt, bekommen wir unseren Contentbereich angezeigt.

    Ist eigentlich selbsterklärend. Wir fangen in der Url den Part action ab (?action=logout) und schauen nach ob dort logout enthalten ist.. Dann "zerstören" wir die Session somit sind wir nicht mehr eingeloggt.


    PHP:
    <? php
    session_start
    ();

    if(isset(
    $_SESSION [ 'login' ])){
    //content
    }
    ?> 

    Setzen wir das an den Anfang einer leeren PHP Datei, haben wir eine neue Seite für unseren Adminbereich. Dort ist nur ein Zugriff erlaubt wenn du eingeloggt bist.


    Naja vllt hilft es dir ja was weiter
    Wenn Parser Error erscheinen schreib einfach die Fehlermeldung rein und ich helf dir.

    Okay schau dir den Code oben nochmal an.. Habe ihn gerade mal getestet und noch was verändert. Geht jetzt aufjedenfall! Ansonsten wird dir das auch helfen:
    Login System Tut
     
  6. 1. Januar 2010
    AW: Admin Login

    Ich entschuldige mich, das ich erst jetzt antworten tu, aber über die Tage war ich war wegen Neujahr.


    Ich danke euch, vor allem dir hacker5, aber leider funktioniert es nicht ganz.

    Ich verstehe nun Anhand deiner Erklärung sehr viel, aber wenn ich diese in einer textdatei abspeicher funktioniert das ganze nicht ganz.


    Hab das ganze einfach Unbekannt1.html genannt und unter htdocs gespeicher, wo eigentlich bei mir alles funktioniert zumindest meine anderen html und php Dateien.

    Den Quellcode von dir habe ich einfach zwischen <html><head><body><?php ....?></body></head></html> gespeichter.

    Wenn ich den Quellcode bei Phrase 5 eingebe, fängt er genau, wenn </form> geschlossen ist ohne Farbe den rest des codes anzuzeigen.


    Weisst du vllt woran das liegen könnte?
     
  7. 1. Januar 2010
    AW: Admin Login

    Du must den PHP Code als .php - Datei abspeichern.
    <html><head><body> ... brauchst du da nicht.
    Also einfach den Code Copy & Pasten, als .php speichern.
    Der php Code begint mit dem <?php - Tag, den also dran lassen.
     
  8. 1. Januar 2010
    AW: Admin Login

    Hab ich auch schon probiert und es ist auf jeden Fall ein programmier Fehler, siehe:

    Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\Admin1.php on line 38


    Code:
    37. //Methode Zwei bei nichtgefallen die beiden zeilen löschen ansonsten die beiden oben.
    38. header('Location:'seite auf die weiter geleitet werden soll.php');

    Aber ich denke der Fehler befindet sich bereits irgendwo hier:

    Code:
    if(!isset($_SESSION['login'])){
    echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">
    <b>Username:</b><input type="text" name="user" ><br />
    <b>Passwort:</b><input type="password" name="pass">
    <input type="submit" name="do_login" value="true">
    </form>';
    }
    
    // [color=red][B]Ich vermute hier im oberen Teil[/B][/color]
    
    if(isset($_POST['do_login']) && $_POST['do_login']=='true' && !isset($_SESSION['login'])){
     if($_POST['pass']==$pw && $_POST['user']==$user){
     $_SESSION['login']='set';
     header('Location:'.$_SERVER['PHP_SELF'].'');
     }
    
     
  9. 1. Januar 2010
    AW: Admin Login

    Muss Linie 38 nicht so sein?

    PHP:
    header ( 'Location:seite auf die weiter geleitet werden soll.php' );
    MfG
     
  10. 1. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    Ups war schon spät Danke gh0stm4k3r.

    Also wenn du Methode 1 nimmst machst du das so:

    PHP:
    else if (isset( $_SESSION [ 'login' ])){

    echo 
    'Das ist eine Testseite<br />' ;
    echo 
    '<a href="' . $_SERVER [ 'PHP_SELF' ]. '?action=logout">Abmelden</a>' ;
    }
    Methode 2:

    PHP:
    else if (isset( $_SESSION [ 'login' ])){
    header ( 'Location:weiterleitung.php' );
    }
    weiterleitung.php

    PHP:
    <? php
    session_start
    ();

    if(isset(
    $_SESSION [ 'login' ])){
    echo 
    'Das ist eine komplett leere Testseite<br />' ;
    echo 
    '<a href="login.php?action=logout">Abmelden</a>' ;
    }
    ?> 
    login.php ggf. anpassen auf den Name der Datei von dem Login Script.
     
  11. 1. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    ich würds lieber mit includes machen:

    mit in login.php (oder so)
    PHP:
    if( session - login - is - ok - etc ) {
       
    define ( 'LOGIN' 1 );
       include 
    $request  '.php' //$request vorher aus parametern auslesen und filtern!
    }
    und in die includes:
    PHP:
    if(! defined ( 'LOGIN' )) exit( 'access denied' );

    //code ...
     
  12. 1. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    Sorry für Off-Topic, aber warum eigentlich Sessions anstelle von Cookies? Arbeite auch gerade an einem Admin Panel für meine Website, wo ich alles über Cookies laufen habe...

    MfG
     
  13. 1. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    Funktioniert super! Die Seite kommt, ich log mich ein und bekomme den Logout Button bzw. werde weitergleitet.

    Beim logout allerdings komme ich da nicht raus... muss man da was bestimmtes programmieren, damit er vllt die Cookies wieder löscht? Weil auf die Startseite komm ich sonst gar nicht rein?
     
  14. 1. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    Welche Cookies? Du musst die Session wieder löschen. hacker5 hat dafür wohl den Befehl

    PHP:
    session_destroy ();
    stehen, aber das funktioniert imho nicht. Da musst du stattdessen

    PHP:
    unset( $_SESSION [ 'login' ]);
    schreiben. Dann dürfte es dich richtig ausloggen.

    MfG

    //e: @Murdoc: mh, stimmt schon, aber warum funktioniert dann das ausloggen bei Cosmopolit nicht?
     
  15. 1. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    klar funktioniert session_destroy()

    schau mal auf der php-doku
     
  16. 2. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    nicht einfach oben mit session_start anfagen!
    PHP:
    <? php
    // login.php
    if( check_login ( $name , $pass ))  // login erfolgreich?
    {
        
    session_start ();
        
    $_SESSION [ 'name' ] =  $name ;
        
    header ( 'Location: userhome.php' );  // zur user seite
    }

    // index.php / sonstiges.php
    if(isset( $_COOKIE [ 'PHPSESSID' ]) OR isset( $_GET [ 'PHPSESSID' ]))  // id vorhanden ?
    {
        
    session_start ();
        echo 
    'Hallo user: ' . $_SESSION [ 'name' ];
    } else {
        echo 
    'keine session!' ;
    }
    ?>
     
  17. 2. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    Es funkitoniert nun. Lag daran das ich im Logout.php den Link zum login umgeschrieben hatte.

    Ich danke euch ganz herzlichst. Das RR Board hat Spitzenleute *Thumbs up.



    Warum sollte deine Variante besser sein bzw der Unterschied?

     
  18. 2. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    session erst starten wenn diese benötigt wird. wichtig ist dieser abschnitt:
    PHP:
    <? php
    if(isset( $_COOKIE [ 'PHPSESSID' ]) OR isset( $_GET [ 'PHPSESSID' ]))  // id vorhanden ?
    {
        
    session_start ();
        echo 
    'Hallo user: ' . $_SESSION [ 'name' ];
    } else {
        echo 
    'keine session!' ;
    }
    ?>
    ansonsten wird jedes mal neue session gestartet, falls benutzer keine cookie-sid oder get-sid hat. wenn man dazu paarhundert mal die seite neuladen lässt, kann es schnell zu perfomanceeinbrüchen kommen.
     
  19. 2. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    PHP: $_REQUEST - Manual
    das boolsche "OR" kannst weglassen.

    if(!empty($_REQUEST['PHPSESSID'])) { }

    aja, "OR" und "||" sind nicht das selbe. also aufpassen und ned nur die besser lesbare version nehmen

    PHP:
    $foo  false ;
    $bar  "hallo" ;

    print 
    $bar  ||  $foo //true
    print  $bar  or  $foo //hallo
     
  20. 2. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    ok ok, dann halt ein elseif dazwischen

    @murdoc, du könntest es ausbessern als tipps zur vegleich von datentypen zu geben
     
  21. 3. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    okay, hier - so würd ich das machen:

    index.php
    PHP:
    <? php

    define
    ( 'ACP_PASSWORD' 'geheim' );
    define ( 'ACP_USERNAME' 'horst' );
    define ( 'ACP_INC_PATH' dirname ( __FILE__ ) .  '/inc/' );
    //wichtig, der ordner sollte ned auf diesen ordner zeigen
    //und am besten ne .htaccess rein: deny from all

    @ ini_set ( 'session.use_trans_sid' 1 );
    session_name ( 'acpsid' );
    session_start ();

    //login
    if(isset( $_POST [ 'login' ])) {
        
    $name  $_POST [ 'name' ];
        
    $pass  $_POST [ 'pass' ];
        
    $_SESSION [ 'login' ] =  sha1 ( $name  $pass );
    }

    //so kann keiner eingeloggt bleiben wenn du das passwort änderst
    if(empty( $_SESSION [ 'login' ])
    || 
    sha1 ( ACP_USERNAME  ACP_PASSWORD ) !=  $_SESSION [ 'login' ]) {
        include 
    ACP_INC_PATH  'login.php' ;
        exit;
    }

    $request  $base  'start.php' ;
    if(!empty(
    $_REQUEST [ 'do' ])) {
        
    $request_t  preg_replace ( '/^[^a-zA-Z_0-9]+$/' '' $_REQUEST [ 'do' ]);
        
        
    //logout
        
    if( $request_t  ==  'logout' ) {
            
    session_unset ();
            
    header ( 'Refresh: 5; URL=index.php' );
            exit(
    'ausgeloggt' );
        }
        
        if(
    file_exists (( $request_t  ACP_INC_PATH  $request_t  '.php' )))
            
    $request  $request_t ;
    }

    define ( 'ACP_LOGIN' 1 );
    include 
    $request ;
    in login.php packst n formular zum einloggen (name und pass) und schon kannst loslegen.

    unterseiten legst du so an:

    PHP:
    <? php
    if(! defined ( 'ACP_LOGIN' )) exit( 'zugriff verweigert' );

    //dein code, zb "logout" oder so ;)
    ansteuern kannst du diese seiten mit nem "do"-parameter zb: http://mein-acp.tld/index.php?do=soundso

    //@funland

    oha :lol:

    du weißt, dass sessions im tmp-ordner landen und selbständig wieder entfernt werden?

    wenn du ein suchfomular bei deiner homepage verwendest und die suche in ner db oder in datein aufm server duchführen lässt, dann frisst da ein dauer-refresh 10x mehr ressourcen als ne leere (0byte) session im tmp-ordner.

    aja, ich kann den server auch vollmüllen wenn ich den cookie einfach per hand jedes mal lösch...
     
  22. 3. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    nein, nein und noch mal NEIN!
    wie oft den noch? session erst starten wenn diese benötigt wird!!!

    wenn ich als benutzer keine cookies aktiviert habe und die index-seite einfach mal ohne ende anfange diese zu aktualisieren, dann viel erfolg mit leeren-sessions an den seitenbereiber nzw. server.
     
  23. 3. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    Und was ist, wenn ich in meiner index.php via GET die gewünschte Seite include.
    Auf der index.php starte ich am Anfang die session, da sie sogut wie auf 99% der Seiten benötigt wird. Dann ist das auch schlecht für die performance?

    Man kann doch nicht in jeder von 200 unterseiten die session starten wann sie gebraucht wird.
     
  24. 3. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    PHP_SELF + Apache + AcceptPathInfo = XSS-Lücke.
    http://host/index.php/<script>alert(1)</script>





    DITO!
    Um das ganze auch für die Leutchen zu liefern, die session.name in der php.ini geändert haben:
    PHP:
    if(isset( $_REQUEST [ session_name ()]))  // id vorhanden ?
    {
        
    session_start ();
        echo 
    'Hallo user: ' . $_SESSION [ 'name' ];
    } else {
        echo 
    'keine session!' ;
    }
    ?>




    Wieso nicht? Du kannst doch einer Zuweisung ala $_SESSION[x] = y; einen einfachen Funktionsauf voranstellen. z.B.:

    PHP:
    function  session_start_check ( $force = FALSE )
    {
        if (!
    defined ( 'SESSION_STARTED' ))
        {
            if (!
    $force  && !isset( $_REQUEST [ session_name ()]))
            {
                return 
    FALSE ;
            }
            
    session_start ();
            
    define ( 'SESSION_STARTED' , TRUE );
        }
        return 
    TRUE ;
    }


    if (
    session_start_check ())
    {
        echo 
    'Session aktiv'
    }

    session_start_check ( TRUE );
    $_SESSION [ 'foo' ] =  'bar' ;
    $_SESSION [ 'x' ] =  'y' ;

    if (
    session_start_check ())
    {
        echo 
    'Session immernoch aktiv'
    }
     
  25. 3. Januar 2010
    AW: Session-basierter Adminlogin/Controllpanel ohne Datenbank

    leute, das mit der session kann man sehen wie man will, fakt is, dass dadurch kein nennenswerter nachteil entsteht.

    @Breyndot-Echse, dein beispiel is schwachsinnig, sorry aber das würde ich ned mal einsetzen wenn ichs
    aufgezwungen bekäme :lol:

    jedesmal prüfen ob ne session existiert wenn ich was darin speichern will, komm eh...

    weil das ganz einfach bescheuert is und man am ende keinen überblick mehr hat ob ne session gestartet wurde oder ned. wenn du damit leben kannst, viel spaß damit, aber was richtig komplexes bekommst du damit nicht hin.
     
  26. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.