2016-10-27 3 views
1

Guten Abend SO Community,Probleme beim Anmelden (mit SQL) bei Verwendung einer .htaccess-Datei?

Ich habe vor kurzem an einem Web-Projekt gearbeitet und lief in ein interessantes Thema, ich habe überall im Internet gesucht, war aber nicht in der Lage, es zu lösen. Hier ist was los ist.

Wenn der Benutzer die Website besucht, wird er automatisch auf eine Anmeldeseite weitergeleitet. Sie geben einfach ihren Benutzernamen und ihr Passwort ein und klicken auf die Login-Schaltfläche/den Link (oder drücken Sie die Eingabetaste). Daraufhin wird eine Anfrage an den SQL-Server gesendet, um das Passwort zu bestätigen. Anschließend werden die Sitzungsvariablen für die Benutzerdaten eingetragen. Einfach richtig? Es funktioniert fantastisch! (Nicht viel zu schade. Einfaches PHP/SQL) Wie auch immer, ich arbeitete weiter an dem Projekt und machte viele Fortschritte. Die ganze Zeit funktionierte das Login-System perfekt. Ich musste mich jeden Tag einloggen und das ohne Probleme.

Ich entschied, dass ich die Dateierweiterung aus der URL (website.com/index.html zu nur website.com/index oder website.com/dashboard.php zu nur website.com/dashboard) nehmen wollte. Nachdem ich ein wenig über das Thema geforscht hatte, stellte ich fest, dass dies relativ einfach mit einer .htaccess-Datei mit ein wenig Code gemacht werden kann. Ich habe eine .htaccess-Datei erstellt und den folgenden Code darin abgelegt und dann auf meinen Server hochgeladen. Ich habe die Seite aktualisiert und ein paar Links ausprobiert und festgestellt, dass die Dateierweiterung entfernt wurde. Ich war stolz, haha! Wie auch immer, ich habe weiter ohne Probleme am Projekt gearbeitet. Am Ende des Tages habe ich mich ausgeloggt und meinen Computer heruntergefahren. Am nächsten Tag ging ich los, um mich anzumelden, und es wurde gemeldet, dass ein Fehler beim Einloggen aufgetreten war (Meine benutzerdefinierte Fehlermeldung, wenn auf dem SQL-Server keine Übereinstimmung für die Kombination Benutzername/Passwort gefunden wurde). Ich habe es ein paar Mal vergeblich versucht. Erschrocken loggte ich mich in meine Systemsteuerung und den SQL-Manager ein, um sicherzustellen, dass die Informationen korrekt waren. Es war. Ich habe darüber nachgedacht, was ich am Tag zuvor gemacht habe, was sich auf das Login-System auswirken und es auf die .htaccess-Datei beschränken könnte. Ich startete mein FTP und löschte die Datei vom Server und versuchte mich erneut mit den gleichen Informationen anzumelden. Erraten Sie, was? Es funktionierte!

Es verursachte keine Probleme bei der Arbeit am Tag davor, da ich bereits angemeldet war, wenn ich die Datei hochgeladen habe. Damit ich mich anmelden kann, muss ich die .htaccess-Datei löschen, mich anmelden und sie dann erneut hochladen. Ich kann mir das nicht vorstellen. Mit meinem Glück ist es wahrscheinlich etwas Einfaches, dass ich vermisse. Bitte sehen Sie meinen Code unten und lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. (Hoffentlich bedeckte ich alles.)

.htaccess

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

## hide .php extension 
# To externally redirect /dir/foo.php to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R,L,NC] 

## To internally redirect /dir/foo to /dir/foo.php 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule^%{REQUEST_FILENAME}.php [L] 

RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule^%{REQUEST_FILENAME}.html [L] 

RewriteCond %{HTTP_HOST} ^subDomain\.website\.com$ [NC] 
RewriteRule ^(.*) http://www.subdomain.com/$1 [L,R] 

RewriteCond %{HTTP_HOST} ^www.subDomain\.website\.com$ [NC] 
RewriteRule ^(.*) http://www.subdomain.com/$1 [L,R] 

Die letzten vier Zeilen Code wurden gestellt in einer Sub-Domain eines URL zu einer ganz anderen Domain zu umleiten. Beispiel: subdomain.website.com würde zu subdomain.com umleiten.

login.php

<? 
    session_start(); 
    $_SESSION["LOGGEDIN"] = "FALSE"; 
    $_SESSION["NAME"] = "NULL"; 
    require_once 'myConnectionFile.php'; 

    $uCheck = $_POST['uName']; 
    $uCheck = strtoupper($uCheck); 
    $pCheck = $_POST['pWord']; 



    //echo "Attempting to log in " . $uCheck . "!<br><br>"; 
    //echo ""; 

    $sql = "SELECT id FROM USERNAMES WHERE uName = '$uCheck' and PASSWORDS = '$pCheck'"; 
    // echo $uCheck . " " . $pCheck; 
    $result = mysqli_query($conn,$sql); 
    $row = mysqli_fetch_array($result,MYSQLI_ASSOC); 
    // $active = $row['active']; 
    $count = mysqli_num_rows($result); 

    if($count == 1) { 
     //echo "Logged in!<br>"; 
     $_SESSION["LOGGEDIN"] = "TRUE"; 
     $_SESSION["NAME"] = $uCheck; 
     //echo $_SESSION["LOGGEDIN"]; 
     $sql_SESSION = "SELECT * FROM USERNAMES WHERE uName='$uCheck'"; 
     $result_SESSION = mysqli_query($conn,$sql_SESSION); 
     if ($result_SESSION->num_rows > 0) { 
      while($row_SESSION = $result_SESSION->fetch_assoc()) { 
       $_SESSION["USER"] = $row_SESSION['uName']; 
       // LOAD SESSION VARIABLES HERE 
      } 
     } 

     header('Location: http://www.website.com/Dashboard.php'); 
    } else { 
     echo "Error logging in!"; 
     header('Refresh: 3; URL=destroySessions.php'); 
    } 

    // session_unset(); <- Unsets all session variables. 
    // session_destroy(); <- Destroys (Removes) a session. 
?> 

Denken Sie daran, änderte ich die Informationen zu Sicherheitszwecken einige.

Nach dem Code Überprüfung (s), können Sie Grund sehen die .htaccess-Datei me/Anmeldung von Benutzern in mein System verhindern?

Alle Vorschläge werden sehr geschätzt!

Vielen Dank im Voraus,

Tim

+0

Haben Sie eine 307-Umleitung versucht, so dass der POST nicht zu einem GET wird? – Ultimater

+0

Nein, habe ich nicht. Wie würde ich das versuchen? –

+0

'RewriteRule ^% 1 [R = 307, L, NC]' – Ultimater

Antwort

3

302 und 301 Umleitungen werden POSTed Daten und zu einem GET-Request verlieren.Eine gute Lösung ist, eine 307-Weiterleitung zu verwenden, da es während der Umleitung eine POST-Anfrage bleibt:

+0

Perfekt. Vielen Dank für die schnelle Antwort, genaue Antwort und Erklärung. –

Verwandte Themen