2010-08-09 10 views
6

Ich bin neu in der Webprogrammierung und versuche, ein paar gute Beispiele/Tutorials zu finden, wie man eine anständige Arbeit zum Erstellen einer Website macht, die Benutzer zur Anmeldung von Seiten jenseits des Hauptprotokolls benötigt auf Seite.php passwortgeschützte website

Bisher habe ich 1 oder 2 gefunden, die ive versucht, aber ich laufe immer wieder in das gleiche Problem. Wenn ich nur die URL der Seite eingeben, die ich manuell sehen möchte, kann ich reinkommen, als wäre da nichts.

+0

ist dies die tutoral ive bisher folgende, und ich glaube nicht, seine Arbeits http://www.phpeasystep.com/phptu/6.html – Crash893

+0

Vielleicht falsch verstanden I Die Frage, brauchen Sie ein vollständiges Benutzer-Login-System (zB müssen verschiedene Benutzer verschiedene Dinge sehen) oder möchten Sie nicht, dass jeder Ihre Website sehen kann? Meiner Meinung nach ist .htaccess der richtige Weg. – williamg

+0

Ich möchte an den Punkt kommen, wo ich Benutzer und Admins und Power User haben kann – Crash893

Antwort

0

Es ist nicht PHP für die Authentifizierung verwenden, aber Sie können .htaccess verwenden Authentifizierung und möglicherweise die .htpasswd Datei verwalten PHP:

http://www.freewebmasterhelp.com/tutorials/htaccess/

+1

Er will PHP, nicht Apache-Konfiguration, nicht aus dem Thema –

+0

Er erklärte, dass er neu zu Web-Programmierung war und dass er nach einer Möglichkeit suchte, eine Website zu erstellen, die Benutzer benötigt, um sich alle Seiten jenseits der Haupt anzuzeigen Loginseite. .htaccess ist eine Möglichkeit, dies zu tun, an die er vielleicht nicht gedacht hat. Er hat nie gesagt, dass die Lösung in PHP sein muss. –

+0

Ich möchte immer noch PHP, aber das wird mir mit einem anderen Projekt so +1 für die Idee trotzdem helfen (Ich weiß nicht, wer-Sie) – Crash893

1

Die Websites, die Sie wahrscheinlich umgehbar erwähnt sind, weil die Seiten über die Sicherheitsüberprüfung für Login-Status speichern und prüfen nicht, dann auf jeder Seite. Sie müssen überprüfen, ob ein Besucher angemeldet ist, bevor der Zugriff auf eine Seite gewährt wird.

1

Ich denke, dass die meisten Benutzer Formulareingabe für eine Anmeldung erwarten würden. Wenn Sie möchten, dass der Benutzer später nach Ablauf der Sitzung erneut mit demselben Konto angemeldet wird, benötigen Sie eine Datenbank zum Speichern von Benutzerinformationen.

Wenn Sie Benutzerinformationen in einer Datenbank speichern, sollten Sie ihr Kennwort wahrscheinlich auch nicht speichern. Ein Beispiel:

name password       ... 
----------------------------------------------- 
Johnny '3858f62230ac3c915f300c664312c63f' 
Alice '80338e79d2ca9b9c090ebaaa2ef293c7' 
. 
. 
. 

Passwort Johnnys ist eigentlich „foobar“, aber die Datenbank speichert md5('foobar'). Als Johnny sich anmeldet, gibt er seinen Benutzernamen ("Johnny") und sein Passwort ("Foobar") ein. In PHP, hash Sie das Kennwort er eintrat, und rufen Sie sein Passwort Wert aus der Datenbank, die sich in:

if (md5('foobar') == '3858f62230ac3c915f300c664312c63f') 

Diese bedingte ist true. Sie können bestätigen, ob er sich korrekt angemeldet hat, aber Sie speichern nie sein tatsächliches Passwort.

Alices Passwort ist 'Foobaz'. Sie versucht sich einzuloggen, gibt aber zufällig "foobar", Johnnys Passwort ein. dies ergibt:

if(md5('foobar') == '80338e79d2ca9b9c090ebaaa2ef293c7') 

Welches ist false. Noch einmal, Sie wissen nicht, was Alices Passwort ist, nur dass sie den falschen eingegeben hat.

Der Nachteil dieser Strategie ist natürlich, dass Sie dem Benutzer nicht sagen können, was sein Passwort ist, wenn sie es vergessen - Sie wissen es nicht! Sie können dies beheben, indem Sie einem Benutzer das Passwort (auf eine halb zufällige Zeichenfolge) zurücksetzen lassen, anstatt ihnen zu sagen, was ihr Passwort ist.

+1

Beachten Sie, dass diese Methode der beste Weg wäre, wenn Sie müssten Speichern Sie einzelne Informationen für jeden Benutzer. Wenn Sie nur bestimmte Leute brauchen, um Teile oder eine ganze Website zu sehen, ist das vielleicht zu viel. – williamg

2

Wenn Sie sich mit einem Formular anmelden, sollten Sie den Benutzernamen und das Passwort in der Datenbank überprüfen. Das Passwort sollte verschlüsselt werden (normalerweise unter Verwendung des MD5-Hash-Algorithmus) und auf die gleiche Weise in der Datenbank gespeichert werden. Sie können die Variablen erfassen, mit so etwas wie (einige Validierung, um zu überprüfen, ob die POST-Variablen gültig sind):

$username = $_POST['username']; 
$passwordHash = md5($_POST['password']); 

Der Benutzername und das Kennwort gehasht sollte in Ihrer Datenbank gespeichert werden. Anschließend können Sie in der Datenbank nach einer Übereinstimmung prüfen mit:

$res = mysql_query("SELECT * FROM users WHERE username='".$username."' && password='".$password."'"); 

Wenn ein Benutzer gefunden, die Sie verwenden Sitzungen der Benutzerwerte zu speichern, die Sie Zugriff auf einen Benutzer Informationen über mehrere Seiten erhalten können. HINWEIS: session_start() wird normalerweise oben auf der Seite platziert, aber ich lege es hier zur besseren Lesbarkeit.

if (mysql_num_rows($res)) { 
    session_start(); 
    session_regenerate_id(); // regenerate session_id to help prevent session hijacking 
    $row = mysql_fetch_assoc($res); 
    $_SESSION['logged_on'] = true; 
    $_SESSION['username'] = $row['username']; 
    // add more session variables about the user as needed 
} 

Auf jeder Seite, die Sie schützen möchten, können Sie die folgenden an die Spitze dieser Seiten hinzufügen:

session_start(); 
if (!isset($_SESSION['logged_on'])) { 
    header("Location: login.php"); // user is not logged in, redirect to login page 
    exit; 
} 
// page content here 
6

Okay, ich erklären werde, wie das Grundkonzept geht und eine sehr einfache Implementierung Dinge in Gang bringen.

PHP (und die meisten Webanwendungen) sind auf REST-konforme Dienste angewiesen - was zu unserer Zeit bedeutet, dass jede Anfrage nicht remote an irgendeine andere Anfrage gebunden ist - entweder vom selben Benutzer oder von anderen.

Was bedeutet das?

Dies bedeutet, dass Sie für jede einzelne Anfrage Ihre Prüfungen durchführen müssen. Sie müssen sicherstellen, dass der Benutzer berechtigt ist, diese Seite auszuführen, oder weniger streng, sogar den Inhalt sehen.

Wie wird das erreicht?

Auf viele Arten, tatsächlich. Es gibt viele Techniken, die verwendet werden, um die Autorisierung für Webanwendungen durchzusetzen, aber sie würden im Wesentlichen beide auf einen von zweien herunterbrechen - entweder zentralisiert oder dezentralisiert.

- Zentralisierte

Das bedeutet, alle Aktionen (und Controller) über eine einzige Datei behandelt werden. Sagen Sie index.php. Diese Datei würde dann ihre Aufgaben basierend auf Anforderungsparametern in andere Dateien aufnehmen oder delegieren (die nicht über normale Anforderungen alleine ausführbar sind). Dies ist ein sehr beliebter Ansatz, aber nicht gerade geradlinig für neue Entwickler. Beispiele für Anwendungen, die diesen Ansatz verwenden, hätten URLs vom Typ: index.php? Do = register, index.php? Do = login, index.php? Do = showtopic & topic_id = 2 und so weiter.

wäre eine einfache Implementierung dieser Technik gehen wie:

<?php 
// index.php 
define('RUNNING_APP', true); 
// 1. place your auth code here, or... 
switch ($_REQUEST['do']) { 
    case 'register': 
     // 2. or here 
     include 'inc/register.php'; 
     break; 

    case 'do_register': 
     // 2. and here, and before every include.. and so forth. 
     include 'inc/do_register.php'; 
     break; 
} 
?> 

<?php 
// inc/register.php 
defined('RUNNING_APP') or die('Cannot access this script directly'); // make sure to break direct access 
?> 
<form action="index.php?do=do_register"> 
<!-- form elements --> 
</form> 

und so weiter.

Ich habe dokumentiert, wo der übliche Auth-Code gehen sollte.

- Dezentrale

Mit diesem Ansatz sollte jedoch Ihr Auth-Code am Anfang jeder einzelnen Datei gehen. URLs von Anwendungen dieser Art sehen normalerweise wie folgt aus: register.php, login.php und so weiter. Das Hauptproblem hier ist, dass Sie alle Auth-Logik pro Datei durchführen müssen, wie oben erwähnt, und das kann ein hektischer Job sein, wenn Ihre Dateien in Menge zunehmen. Eine praktische Lösung besteht darin, diese Logik in einer einzigen Datei zu speichern und diese Datei (die die Anforderung für unauthor personel beenden würde) vor jeder Ihrer Logik einzubeziehen. Ein einfaches Beispiel wäre:

<?php 
// index.php 
include('inc/auth.php'); 
// index logic 
?> 

<?php 
// register.php 
include 'inc/auth.php'; 
// register logic 
?> 

<?php 
// inc/auth.php 
$logged_in = false; 
if (!$logged_in) { 
    die ('You do not have permission to access this page. Please login'); 
} 
?>