• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Login Session Problem

timmy38233

Rhode Island Greening
Registriert
20.07.08
Beiträge
474
Du bekommst die gleiche Ausgabe, weil Du den String innerhalb des var_dump nicht geändert hast ;)

In der Register.php Hasht Du das Passwort mehrmals mit einem (bzw 3) relativ unsicheren Salt… Das ist zwar grundsätzlich eine gute Idee, allerdings bringt das mit der MD5-Funktion relativ wenig, da diese als unsicher gilt. (Hast Du das selbst geschrieben, oder ist das von irgendwo kopiert?)

Spätestens jetzt würde ich anfangen, solche Dinge über Funktionen auszulagern. Das heißt, dass Du für das Passwort-Hashen eine Funktion erstellst, die Du dann auch einfach in der Login.php aufrufen kannst. Damit verhinderst Du, dass Du Code doppelt schreiben musst und somit evtl. Fehler an mehreren Stellen suchen musst.

Wenn ich später mal Zeit habe, kann ich auch Deinen Code generell mal ein wenig sortieren…
 

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Hallo timmy

Ja, die Variable in var_dump bleibt gleich, aber ich ändere ja nur den mysql_query und somit sollte es ja den neuen query ausgeben, welchen mich aber sowieso nicht viel weiter bringen wird, da das Problem leider noch nicht behoben ist.

Ja, wie ich glaube in einem Beitrag erwähnt habe, bin ich ziemlich neu in PHP und schaute deswegen ein paar Tutorials und Dokumentationen und habe dort zum Teil Code übernommen.

Ja, solch eine Funktion wäre sicherlich gut, aber für den Anfang sollte es reichen, denn ich möchte den Code nicht sonderlich erweitern, sondern erst einmal den Fehler beheben und danach denn Code komplett neu schreiben der alles vereinfacht und neue Funktionen und Sicherheitsvorkehrungen beinhaltet.

Falls du Zeit haben solltest wäre ich dir unendlich dankbar den Code zusortieren, vielleicht findest du dabei den Fehler, ich habe nämlich ca. 10 Stunden gesucht und mich dann hierhin gewendet.

Vielen Dank für deine Hilfe
Kebab
 

timmy38233

Rhode Island Greening
Registriert
20.07.08
Beiträge
474
Das Problem ist, dass Du das Passwort unterschiedlich hasht… Das ist an sich kein großes Problem, da Du einfach in der Login.php zum Vergleich den gleichen Vorgang nehmen könntest, wie in der Register.php.
PHP:
 $salt1 = "francis";
   $salt1 = md5($salt1);
   $salt2 = "cookie";
   $salt2 = md5($salt2);
   $salt3 = "php";
   $salt3 = md5($salt3);
   $password = $salt1.$password.$salt3;
   $password = md5($password.$salt2);

Setz das vor folgende Zeile:
PHP:
$check_password = mysql_query("SELECT password FROM users WHERE password='$password' && username='$username'");

Hab's jetzt nur auf dem Handy gemacht, aber eigentlich müsste es damit gehen. Zumindest solltest Du jetzt schonmal erahnen können, was das Problem war.

Gestern hatte ich leider keine Zeit den Code generell zu überarbeiten, aber ich guck mal ob ich's heute schaffe…
 

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Hallo @timmy38233

Vielen Dank für deine Antwort der neue Login Code sieht nun folgendermaßen aus:
PHP:
<?php
include ( './includes/header.php' );
session_start();

if (isset($_POST['username'])&&($_POST['password'])) {
  $username = strip_tags($_POST['username']);
  $password = strip_tags($_POST['password']);
  echo $username;
$check_username = mysql_query("SELECT username FROM users WHERE username='$username'");
$numrows = mysql_num_rows($check_username);
if ($numrows != 1) {
  echo 'That User doesn\'t exist.';
}
else
{
   $salt1 = "francis";
   $salt1 = md5($salt1);
   $salt2 = "cookie";
   $salt2 = md5($salt2);
   $salt3 = "php";
   $salt3 = md5($salt3);
   $password = $salt1.$password.$salt3;
   $password = md5($password.$salt2);
  $check_password = mysql_query("SELECT password FROM users WHERE password='$password' && username='$username'");
  while ($row = mysql_fetch_assoc($check_password)) {
   $password_db = $row['password'];

   if ($password_db == $password) {
     $_SESSION['username'] = $username;
    header("Location: members.php");
   }
Leider bekomme ich diesen Error zurück:
Warning: Cannot modify header information - headers already sent by (output started at /srv/disk11/1807619/www/blabla/includes/header.php:17) in /srv/disk11/1807619/www/blabla/login.php on line 30

Der Header Code ist hier unten falls du ihn brauchst, aber der funktioniert eigentlich gut...
Header:
PHP:
<?php
session_start();
include ( './includes/functions.php' );
include ( './includes/connect_to_mysql.php' );
$user = "";
if (isset($_SESSION['username'])) {
$user = $_SESSION['username'];
}
else
{
$user = "";
}
?>
<doctype html>
<html>
    <head>
    <title>VideoBox &bull; <?php echo page_title( 'Share Your Videos with the World!' ); ?></title>
    <?php if ($browser == "Google Chrome" || $browser == "Apple Safari") {
    echo '
    <link rel="stylesheet" type="text/css" href="./videobox/css/sitestyle.css" />
    <link id="edu_menu" rel="stylesheet" type="text/css" href="./videobox/css/webkit/menu_black.css" />
    ';
    }
    else if ($browser == "Mozilla Firefox") {
    echo '
    <link rel="stylesheet" type="text/css" href="./css/sitestyle.css" />
    <link id="edu_menu" rel="stylesheet" type="text/css" href="./css/firefox/menu_black.css" />
    ';
    }
    else if ($browser == "Internet Explorer") {
    echo '
    <link rel="stylesheet" type="text/css" href="./css/sitestyle.css" />
    <link id="edu_menu" rel="stylesheet" type="text/css" href="./css/ie/menu_black.css" />
    ';
    }
        else
        {
        echo '
        <link rel="stylesheet" type="text/css" href="./css/sitestyle.css" />
    <link id="edu_menu" rel="stylesheet" type="text/css" href="./css/webkit/menu_black.css" />
        ';
        }?>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript" src="js/functions.js"></script>
    </head>
<body>
<div class="menu_bg"></div>
    <div id="wrapper">       
            <div id="menu">
                    <ul>
                        <li class="menu_featured"><a href="#">FEATURED</a></li>
                    <li class="menu_popular"><a href="popular.php">POPULAR VIDEOS</a></li>
                        <li class="menu_latest"><a href="latest_videos.php">LATEST VIDEOS</a></li>
                        <li class="menu_newmembers"><a href="latest_members.php">RECENT MEMBERS</a></li>
                        <li class="menu_channels"><a href="#">CHANNELS</a></li>
                        <?php if ($user == "") { echo '
                        <li class="menu_login"><a href="login.php">LOGIN</a></li>
                        <li class="menu_join"><a href="join.php">CREATE AN ACCOUNT</a></li>
                         ';
                         }
                         else
                         {
                        echo '<li class="menu_login"><a href="members.php">MEMBERS</a></li>
                        <li class="menu_login"><a href="logout.php">LOGOUT</a></li>';
                         }
                         ?>

                        </ul>
                    <form action="./search" id="search_form" method="post">
                     <?php if ($browser == "Google Chrome" || $browser == "Safari") {
    echo '
    <input type="text" name="search_box" onBlur="swap_menu(\'./css/webkit/menu_black.css\')" id="search_box" onFocus="swap_menu(\'./css/webkit/menu_lighter.css\')" value="" />
    ';
    }
    else if ($browser == "Mozilla Firefox") {
    echo '
    <input type="text" name="search_box" onBlur="swap_menu(\'./css/firefox/menu_black.css\')" id="search_box" onFocus="swap_menu(\'./css/firefox/menu_lighter.css\')" value="" />
    ';
    }
    else if ($browser == "Internet Explorer") {
    echo '
    <input type="text" name="search_box" onBlur="swap_menu(\'./css/ie/menu_black.css\')" id="search_box" onFocus="swap_menu(\'./css/ie/menu_lighter.css\')" value="" />
    ';
    }
        else
        {
        echo '
    <input type="text" name="search_box" onBlur="swap_menu(\'./css/webkit/menu_black.css\')" id="search_box" onFocus="swap_menu(\'./css/webkit/menu_lighter.css\')" value="" />
        ';
        }?>
    <input type="submit" name="search_button" id="search_button" value="" />
                        </form>
            </div>

Wäre natürlich genial wenn du den Code anschauen könntest, wenn du Zeit hast aber eilt nicht sonderlich habe noch 2 Wochen Zeit.
 
Zuletzt bearbeitet:

timmy38233

Rhode Island Greening
Registriert
20.07.08
Beiträge
474
Okay es scheint zu funktionieren. Das Problem jetzt ist das Header("Location:…"
Das zeigt aber auch, dass die if-Abfrage erfolgreich ist und das Skript versucht über den HTTP-Header Location auf die members.php weiterzuleiten!

Zur Erklärung: Der Fehler kommt dadurch zustande, dass var_dump bereits Ausgaben macht. Wenn Du einen HTTP-Header setzen willst (in dem Fall der Location-Header), dann darf noch keine einzige Zeile zum Client geschickt werden. In dem Moment in dem man eine Bildschirmausgabe macht (hier über var_dump; möglich wäre es aber auch durch ein echo oder sogar durch alles, was nicht zwischen <?php und ?> steht), werden bereits alle Header festgelegt. Dadurch kann man nicht noch im Nachhinein einen Location-header setzen, da der zu diesem Zeitpunkt bereits fest steht.

In Deinem Login-Script bindest Du vorher die Header.php ein. Damit begehst Du aber einen großen Fehler! Wie gesagt, alles was nicht zwischen <?php und ?> steht ist eine Bildschirmausgabe. Wenn Du eine Weiterleitung mit Header machen möchtest, darfst Du vorher keine einzige Bildschirmausgabe machen (nichtmal ein Leerzeichen, nichtmal ein nicht-druckbares Zeichen, das man gar nicht sieht)!
In der Header.php machst Du aber ne ganze Menge Bildschirmausgaben! Du sendest dort bereits fast eine ganze HTML-Seite an den Client.

Du musst Deinen Code also so umstrukturieren, dass die Login-Überprüfung und die Weiterleitung stattfindet, bevor der ganze HTML-Code geschickt wird ;) Dazu darfst Du im Login-Script nicht die Header-Datei einbinden, oder Du lagerst die Ausgaben aus der Header-Datei aus und sorgst dafür, dass diese erst nach der Überprüfung ausgegeben werden ;)

(Die Fehlermeldung zeigt Dir übrigens auch schon ganz genau an, was das Problem ist und wo der Fehler liegt: "Output started in …header.php:17". Heißt soviel wie "Ausgaben starten bereits in der header.php in Zeile 17)
Fehlermeldungen lesen und verstehen zu können ist wichtig! Oft hilt es, die Meldungen zu googlen (natürlich ohne die spezifischen Angaben, wie Datei- und Zeilennamen, da diese bei jedem anders sind).
 
  • Like
Reaktionen: Kebab

Kebab

Boskoop
Registriert
22.02.15
Beiträge
39
Hallo @timmy38233

Vielen Dank für deine schnelle Antwort. Das mit dem Fehlercode habe ich schon verstanden und wusste das ein Header schon ausgegeben wurde ich include ja den Header Code:). Die Location: Members.php war nur als Test gedacht und so konnte ich das Ohne Probleme rauslöschen und wie du dir nun vielleicht denken kannst, funktioniert die Session und der Username wird in der DB erkannt und ich kann mich bestens einloggen. Vielen vielen Dank ich denke nicht das ich den Fehler so schnell ohne dich überwinden hätte können

Vielen Dank
Kebab

PS: Falls du wirklich unnötige Zeit hättest, könntest du vielleicht ja immer noch den Code sortieren, aber sonst ist es nicht mehr sehr wichtig.