PW-Schutz am besten realisieren? |
webworker
Fachidiot Threadstarter
Beiträge: 115 |
Hi,
wie kann ich einen Passwort-Schutz mittels PHP am besten realisieren?
Man soll sich bis zu einem Klick auf "Logout", bzw. bis zum Verlassen der Seite auf mehreren Seiten eingeloggt "bewegen" können.
if($user == $row[user] && $pw == $row1[passwort])
{
...
}
...
?
*g*
Wie kann ich es anstellen, dass das PW bis zum Verlassen der Seite / Logout klicken gespeichert wird?
|
 Profil
Editieren
Zitieren
|
kingkool
Mausakrobat
Beiträge: 154 |
ich würd dir entweder cookies vorschlagen, welche eher nicht so geeignet sind ,da nicht alle benutzer des web diese wollen würd ich sagen speicher das ganze in ner serverseitigen session.....
greetz
kool
---
--------------------------------------
http://www.alkool.ch
|
 Profil
Website
Editieren
Zitieren
|
Can
Halbgott
Beiträge: 1324 |
Genau, also prüf beim Login, ob das richtige Passwort angegeben wurde, wenn ja, legst du in ner SQL-Tabelle ne Session-ID an, die du dann in allen Links als Parameter übergibst. Natürlich musst du dann überall überprüfen, ob die Session-ID gültig ist, also ob IP und User-Agent stimmt. Beim Logout (oder nach nem Timeout) wird die Session-ID dann wieder gelöscht.
---
"S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox
|
 Profil
E-Mail
Editieren
Zitieren
|
c3o
Posting-Schinder
Beiträge: 585 |
Das mit den Sessions würde ich dann doch PHP selbst überlassen...
Hier ein schnelles komplettes Beispiel -- andere Seiten müssten nur nach dem Vorbild von index.php aufgebaut werden.. das Login merkt er sich über die Seiten hinweg.
[index.php]
session_start();
include('layout.inc.php'); output_head('Meine erste passwortgeschuetzte Seite');
include('loginout.inc.php');
?>
du bist drin!
output_foot();
?>
-------------------
[loginout.inc.php]
if($_POST['user']) { //loggen wir grad ein?
/* db check hier */
$richtigeruser = 'ich';
if($user == $richtigeruser && $pw == $richtigespw) {
session_register('user');
} else {
echo ' Falscher Login! ';
}
} elseif($_POST['logout']) { //loggen wir grad aus?
session_destroy(); $_SESSION['user'] = '';
}
if(!$_SESSION['user']) { // nicht eingeloggt
echo 'Bitte logge dich ein';
?>
output_foot();
die();
}
?>
Hallo =$_SESSION['user'] ?>!
-------------------
[layout.inc.php]
function output_head($title) {
?>
=$title ?>
}
function output_foot() {
?>
}
?>
Diese Nachricht wurde geändert von: c3o |
 Profil
E-Mail
Website
Editieren
Zitieren
|
webworker
Fachidiot Threadstarter
Beiträge: 115 |
Ich habe mich mit den Sessions noch nicht viel beschäftigt, aber wie ich das hier sehe, funktioniert das so:
Der User gibt Name & PW ein, wenn die Daten mit einer vorhandenen Session in der DB nicht übereinstimmen, wird eine neue Session angelegt, und wenn sie übereinstimmen, kommt man zum entsprechenden Inhalt.
Bei den nächsten Seiten wird dann geprüft ob die Daten in der DB (IP, User-Agent) mit den anderen übereinstimmen, wenn ja ... ...
Richtig? (wenn nicht bitte korrigieren...)
Nur verstehe ich folgenden Code nicht:
session_register('user');
Was wird da genau gemacht?
Diese Nachricht wurde geändert von: webworker |
 Profil
Editieren
Zitieren
|
webworker
Fachidiot Threadstarter
Beiträge: 115 |
Noch eine Frage...
Wie kann ich soetwas wie automatischen Login machen? (Cookie, ich weiß - aber wie geht das )
|
 Profil
Editieren
Zitieren
|
c3o
Posting-Schinder
Beiträge: 585 |
if($_POST['user']) { //loggen wir grad ein?
Wenn der User das Login-Formular abgeschickt hat...
/* db check hier */
$richtigeruser = 'ich';
if($user == $richtigeruser && $pw == $richtigespw) {
... und das Passwort richtig ist...
session_register('user');
...machen wir $user, also seinen Namen, zu einer Session-Variable, die uns also auf jeder Seite zur Verfügung steht.
} else {
Andernfalls, bei falschem Passwort..
echo ' Falscher Login! ';
...eine Fehlermeldung.
}
} elseif($_POST['logout']) { //loggen wir grad aus?
Wenn der User aber gerade den Logout-Button betätigt hat...
session_destroy(); $_SESSION['user'] = '';
...löschen wir seine Session (sprich in der Praxis dann die Sessiondaten auf dem Server und sein Sessioncookie). Da die Sessionvariablen aber schon beim Abruf des Scripts eingelesen wurden, würde das dann erst ab der nächsten Seite voll gültig, auf dieser haben wir noch die alten Sessionvariable ('user'). Daher leeren wir sie händisch.
}
--- Teil 2 ---
if(!$_SESSION['user']) { // nicht eingeloggt
Wenn es jetzt keine Sessionvariable namens user gibt, ist der Besucher nicht eingeloggt.
echo 'Bitte logge dich ein';
Dazu fordern wir ihn also mit diesem Formular auf...
?>
output_foot();
die();
...und beenden hier die Seite für ihn! Weiter wird dank des die() nicht geparst, wenn der User nicht eingeloggt ist! Möglich wär hier auch ein großes: } else { gewesen, in das dann der gesamte Inhalt kommt. Das ist aber von der Struktur her umständlich, weil irgendwo am Ende diese geschwungene Klammer noch geschlossen werden müsste. PHP würde einen Parse-Error melden, wenn wir die nicht noch in dieser Datei beenden. Wenn, dann würden wir sie aber in der Hauptddatei (index.php), wo der Inhalt steht, am Ende schließen wollen.
}
(end if nicht eingeloggt)
?>
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
c3o
Posting-Schinder
Beiträge: 585 |
soooo, jetzt mit optionalem merk-cookie und md5-verschlüsselung:
http://c3o.org/tools/loginout/
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
[SpecFor]crusher
Otto-Normal-Poster
Beiträge: 97 |
hmm...
fehlt da nicht ein
Diese Nachricht wurde geändert von: [SpecFor]crusher |
 Profil
E-Mail
Website
Editieren
Zitieren
|
Ehemaliges Mitglied (#644)
Forenheld
Beiträge: 832 |
quark,
macht das doch nicht alles auf die alte weise:
[login.php]
session_start ();
if ($_POST['username'] == $user && $_POST['password'] == $passwort) {
$_SESSION['variable'] == "login";
}
else {
//login schmarrn
}
auf der nächsten seite:
[drinne.php]
session_start ();
if (!$_SESSION['variable'] == "login") {
header ("Location: login.php");
exit;
}
else {
// das zeug das ausgegeben wird wenn alles korrekt ist
}
so geht das heute (ungefähr)
|
 Profil
Editieren
Zitieren
|
[SpecFor]crusher
Otto-Normal-Poster
Beiträge: 97 |
Und was ist daran anders?! außer dass du keine globals verwendest?
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
c3o
Posting-Schinder
Beiträge: 585 |
"alte weise"? "heute"?
deins ist eine abgespeckte, user-unfreundlichere und unfertige version von ziemlich genau dem was ich oben gepostet hab.
mach da mal logout und persistentes cookie dazu, lass es von jeder seite funktionieren ohne dass der user nach dem einloggen irgendwo anders rauskommt als er angefangen hat, und ermögliche die einbindung in jede datei mit genau 2 zeilen code [im beispiel session_start(); & include('loginout.inc.php');], dann können wir gern vergleichen -- ich lerne sehr gern dazu!
Diese Nachricht wurde geändert von: c3o |
 Profil
E-Mail
Website
Editieren
Zitieren
|
Ehemaliges Mitglied (#644)
Forenheld
Beiträge: 832 |
ja sorry, ich hab das so erklärt bekommen und hab das fürher genauso gemacht wie in den anderen scrits.
der sagte das währe besser und "neuer" !!!
jedem das seine
|
 Profil
Editieren
Zitieren
|
[SpecFor]crusher
Otto-Normal-Poster
Beiträge: 97 |
c3o schrieb am 06.06.2003 22:33
"alte weise"? "heute"?
deins ist eine abgespeckte, user-unfreundlichere und unfertige version von ziemlich genau dem was ich oben gepostet hab.
mach da mal logout und persistentes cookie dazu, lass es von jeder seite funktionieren ohne dass der user nach dem einloggen irgendwo anders rauskommt als er angefangen hat, und ermögliche die einbindung in jede datei mit genau 2 zeilen code [im beispiel session_start(); & include('loginout.inc.php');], dann können wir gern vergleichen -- ich lerne sehr gern dazu! |
an wen ging das?
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
Ehemaliges Mitglied (#644)
Forenheld
Beiträge: 832 |
ich denke eher an mich!
|
 Profil
Editieren
Zitieren
|