Login mit Sessions

  • Login mit Sessions

    Hi,

    das Login Skript, dass ich verwenden will ist glaub ich von hier...

    Folgende Probleme hierbei:

    1. auf den geschützten Seiten erscheint immer das Login Feld, was ja eigentlich
    blöd ist, da dass ja nach der erfolgreichen Anmeldung nicht mehr kommen
    muss

    2. die Seite mit dem Login Feld geht immer in über den ganzen Bildschirm, statt nur
    über das Hauptframe

    3. Bei korrektem, genau wie bei inkorrektem Login bleibt die Seite weiss

    hier das Skript:

    secure.php

    Quellcode

    1. <?php
    2. if($_POST['p_submit'] == 1) {
    3. $_SESSION['s_user'] = $_POST['p_user'];
    4. $_SESSION['s_password'] = md5($_POST['p_password']);
    5. }
    6. $login = false;
    7. $file = file('http://localhost/db.txt');
    8. if($_SESSION['s_user'] != '' && $_SESSION['s_password'] != '')
    9. foreach($file as $row) {
    10. $row = explode("\t", $row);
    11. $user = trim($row[0]);
    12. $password = trim($row[1]);
    13. if($user == $_SESSION['s_user'] && $password == $_SESSION['s_password']) {
    14. $login = true;
    15. }
    16. }
    17. if($login == false) {
    18. if($_POST['p_submit'] == 1)
    19. echo 'Fehler beim Login. Benutzername und/oder Passwort nicht korrekt.';
    20. else
    21. echo 'Bitte anmelden';
    22. require('login4.php');
    23. die();
    24. }
    25. ?>
    Alles anzeigen




    login4.php:

    Quellcode

    1. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    2. <input type="hidden" name="p_submit" value="1" />
    3. <table>
    4. <tr>
    5. <td>Benutzername:</td>
    6. <td><input type="text" name="p_user" value="<?php echo $_POST['p_user']; ?>" /></td>
    7. </tr>
    8. <tr>
    9. <td>Passwort:</td>
    10. <td><input type="password" name="p_password" /></td>
    11. </tr>
    12. <tr>
    13. <td colspan="2">
    14. <input type="submit" value="Login" />
    15. </td>
    16. </tr>
    17. </table>
    18. </form>
    Alles anzeigen



    einbinden.php:

    Quellcode

    1. <?php require('secure.php'); ?>
  • Ok, zur Erläuterung nochmal folgendes. Die Site um die es geht nutzt ein CMS... Außerdem läuft alles über Sessions.
    Die Session wird anderswo bereits zum Starten aufgerufen - daher kann ich sie nicht nochmal starten.

    Das Problem ist nun, dass ich einen Login brauch, der nicht nur prüft, ob eine Session gestartet wurde(weil direkt beim index.php-Aufruf ne Session gestartet wird).

    Ich quäl mich schon ewig damit rum und komm nur schleichend voran.

    Du kennst dich doch auch mit CMS´s aus... Bei meinem ist es so, dass wenn ich einer Seite (wie z.B. der geheimen Seite) Code zufügen will, dann muss ich erst ein Content-Item erstellen. D.h. eine normale PHP-Datei und eine dazugehörige XML-Datei.
    Aus der XML-Datei erkennt das CMS, ob es sich um statischen oder dynamischen Code handelt. - Nun weiss ich nich, wie ich ihm beibringen soll, dass es Dynamischer Inhalt ist. Wenn die xml-Datei sagt"statisch", dann wird der Inhalt nciht aktualisert nachm login...

    hiermal ein Beispiel der XML Datei:

    Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <ctelement>
    3. <title>Content : login beispiel</title>
    4. <description>login beispiel</description>
    5. <templatefilename>login_beispiel.php</templatefilename>
    6. <editinpage>1</editinpage>
    7. <usetable>cms_content_test</usetable>
    8. <usecssfile>user/media/css/screen.css</usecssfile>
    9. </ctelement>
  • naja, wie bindest du das template element denn ein?
    die sessionabfrage klappt natürlich nicht, wenn du mit dem geparstem code arbeitest (also via file(), file_get_contents() oder ähnlichem)

    ich hab zwar auch mal ein CMS mit modulen gecoded.. aber das ganz zu anfang..
    ich glaub damals mit ob_start und includes
    dann hast du auch mit include und require vermutlich keine probleme


    war der folgende quote auf den wiki code bezogen?
    Das Problem ist nun, dass ich einen Login brauch, der nicht nur prüft, ob eine Session gestartet wurde(weil direkt beim index.php-Aufruf ne Session gestartet wird).


    der code aus dem wiki vergleicht bei jedem aufruf den inhalt der session mit der benutzerdatenbank

    Quellcode

    1. if($user == $_SESSION['s_user'] && $password == $_SESSION['s_password']) {
  • naja, kannst ja auf cookie umstellen.. kenne aber nix anderes..

    aber mal ne frage.. CMS mit modulen, xml, ... ist doch alles viel komplizierter als ein einfaches login
    kriegst du das nicht selbst hin?

    * brauchst ja nur eine authentifizierung mit ner userdatenbank (benötigte kenntnisse: file(), foreach, vergleichsoperatoren)

    * speichern des cookies (setcookie())

    * auslesen des cookies ($_COOKIE['name'])
  • Neneee - du darfst nicht denken, dass ich das CMS selbst gecoded habe... ist ein gekauftes. Meine Programmierkenntnisse sind eher schlecht als Recht...grad bei PHP kenn ich mich eigentlich gar nicht aus.
    Eigentlich sind die vielen tollen Session-skripte im Netz bestimmt recht easy umsetzbar...aber ich bin hier halt an bestimmte Vorgaben gebunden...und da ich es jetzt schon seit 2 Wochen versuche und nicht hinkriege...will ich nun einfach eine unsichere Variante nehmen, die aber ohne Sessions auskommt.

    Hatte mal was gesehen, wo nur irgendwie per POST das Passwort abgeglichen wird....und man dann halt zur geheimen Seite kommt...nur jetzt find ichs nich mehr...

    ne Idee???
  • Hab eins gefunden, allerdings haut die Ausgabe nicht hin:

    Quellcode

    1. <?php
    2. $is_user = false;
    3. /**
    4. * Auswertung
    5. */
    6. if($_POST['sub_login']) {
    7. $handle = fopen ("user.txt", "r");
    8. while (!feof($handle)) {
    9. $buffer = fgets($handle, 1024);
    10. $arr = explode(":", $buffer);
    11. if((trim($arr[0]) == $_POST['user']) && (trim($arr[1]) == $_POST['password'])) {
    12. // Login ist OK
    13. $is_user = true;
    14. break;
    15. }
    16. }
    17. fclose ($handle);
    18. }
    19. if($is_user == true) {
    20. /**
    21. Wenn Login Ok ist, passiert irgendwas
    22. */
    23. echo "Hallo <strong>".$_POST['user']."</strong> dein Login ist OK!";
    24. }
    25. else {
    26. ?>
    27. <form action="login.php" method="post">
    28. <p>Username : <input type="text" name="user"></p>
    29. <p>Passwort : <input type="password" name="password"></p>
    30. <p><input type="submit" name="sub_login" value="Login"></p>
    31. </form>
    32. <?php
    33. }
    34. ?>
    Alles anzeigen





    Ausgegeben wird:

    Loginformular


    [form action="validateLogin.inc.php" method="post"]

    [input type="text" name="username"]
    [input type="password" name="passwort"]

    [input type="submit" name="login" value="Einloggen"]

    [/form]



    Wo ist der Fehler???
  • welches fertig cms benutzt du denn, das keine Logins unterstützt????

    aber egal..
    ich versteh nicht ganz wie dein CMS arbeitet..
    wenn du php code ausführen kannst, dann kannst du auch auf sessions zugreifen
    naja, vielleicht kannst du ja mit cookies arbeiten

    binde also die login.php ins template ein und ändere
    <?php echo $_SERVER['PHP_SELF']; ?> zu setcookie.php

    diese erstellst du mit folgendem inhalt

    Quellcode

    1. <?php
    2. setcookie("Cookie", $_POST['p_user'].'|'.$_POST['p_password'], time()+86400);
    3. header('Location: http://localhost/adminseite.php'); //Weiterleitung
    4. ?>


    und falls du die secure.php einbinden kannst, dann ergänze in der ersten php zeile

    Quellcode

    1. $auth = explode('|', $_COOKIE['Cookie']);

    und ersetze dementsprechend die session variablen

    hab das mal für dich vorbereitet:

    Quellcode

    1. <?php
    2. $auth = explode('|', $_COOKIE['Cookie']);
    3. $login = false;
    4. $file = file('http://localhost/db.txt');
    5. if($auth[0] != '' && $auth[1] != '')
    6. foreach($file as $row) {
    7. $row = explode("\t", $row);
    8. $user = trim($row[0]);
    9. $password = trim($row[1]);
    10. if($user == $auth[0] && $password == $auth[1]) {
    11. $login = true;
    12. }
    13. }
    14. if($login == false) {
    15. echo 'Bitte anmelden';
    16. die();
    17. }
    18. ?>
    Alles anzeigen