Fahrtenbuch genial!
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 05.12.2002, 23:15   #1
TP-Member
 
Registriert seit: Jan 2002
scooter macht alles soweit korrekt

Wie macht man am besten eine User-Anmeldung?


Hallo,

ich habe ein Clanwar-Script geschrieben, allerdings ist meine Lösung zur Anmeldung der Members nicht die optimale; es funktioniert öfter nicht.
Das Script besteht aus einem Adminbereich für alle Einstellungen (User anlegen etc.) und dem eigentlichen "Warplaner". Es hat ein Hauptscript von dem man noch zwei andere aufrufen kann.
Man muss sich eigentlich nur anmelden, wenn man sich für einen War eintragen will oder die Admins etwas eintragen/löschen/posten wollen.
Die Anmeldung findet über einen Button "Login" statt, der linkt (category=login) zu einem Teil im Hauptscript, der das Login durchführt. Es wird eine eindeutige UIN erzeugt und bei dem jeweiligen User in der DB gespeichert. Ausserdem sollte man die Möglichkeit haben ein Cookie zu speichern, damit man sich nicht jedesmal wieder neu anmelden muss.
Die UIN ist der Schlüssel zum User und wir bei jedem Link mit übergeben, nur funktioniert das manchmal nicht richtig, weil die UIN auch abläuft und der die dann nicht verlängert oder erneuert.
Wenn ich dann vom Hauptscript aus ein anderes aufrufe, übernimmt der die UIN ab und zu nicht.
Das mit dem Cookie funktioniert auch nícht wirklich.

Ich steige da noch nicht so ganz durch.
Wo packt man das mit dem Login am besten hin?
Und wie regelt man das mit der UIN und den Cookies?

Wäre echt super, wenn mir jemand helfen könnte.


Danke!


Scooter
scooter ist offline   Mit Zitat antworten


Alt 05.12.2002, 23:18   #2
TP-Veteran
 
Benutzerbild von Scriff
 
Registriert seit: Nov 2002
Ort: bei Stuttgart (Esslingen)
Scriff macht alles soweit korrekt
kurze zwischenfrage...wo hostest du das script ?
soweit ich mal mitbekommen hab is bei puretec keine Headerübertgabe möglich (aber nicht sicha)
Scriff ist offline   Mit Zitat antworten
Alt 05.12.2002, 23:26   #3
TP-Member
 
Registriert seit: Jan 2002
scooter macht alles soweit korrekt
Bei Host-Europe...
scooter ist offline   Mit Zitat antworten
Alt 06.12.2002, 00:24   #4
TP-Specialist
 
Benutzerbild von the0bone
 
Registriert seit: Mar 2001
Ort: NDS
the0bone ist auf einem guten Weg
So mach ich das:

Session wird gestartet.
LogIn werden Name und Passwort abgefragt und in die Session übergeben.
Auf jeder Seite wird jetzt ein abgleich zwischen Datenbank und Sessiondaten gemacht. Ist dieser Positiv, wird die Seite erstellt. Bei einem Fehler kommt "Verboten".

Da die Session so lange da bleibt, wie der Browser offen ist, hat der Admin auf jeder Seite seine Rechte und auch, wenn er wiederkommt.


Gleiches sollte mit einem Cookie gehen, da die Session ja nichts anderes macht als einen Cookie zu setzen.

Beispiel: http://www.bushidoalfeld.de/index.php?page=910
__________________
the0bone

Wissen ist Macht, nichts Wissen macht nichts!
the0bone ist offline   Mit Zitat antworten
Alt 06.12.2002, 01:07   #5
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Sprich - bei jedem Seitenaufruf machst Du einen Datenbankzugiff? Wozu? Es reicht doch völlig, nach einem erfolgreichen Check z.B. ein $login=true in die Session zu schreiben. Dann checkt man auf jeder zur sichernden Seite, ob in der Session die Variable $login existiert.

Die Session kann man weder fälschen, noch ein anderes Mal nutzen, sobald das Browserfenster zugemacht wird.
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist offline   Mit Zitat antworten
Alt 06.12.2002, 01:17   #6
jsb
TP-Newbie
 
Registriert seit: Aug 2001
Ort: Ahrensburg
jsb macht alles soweit korrekt
Zitat:
Original geschrieben von Adagio
... $login=true in die Session zu schreiben. Dann checkt man auf jeder zur sichernden Seite, ob in der Session die Variable $login existiert.

Die Session kann man weder fälschen, noch ein anderes Mal nutzen, sobald das Browserfenster zugemacht wird.
hmm, also ich würde meinen, dass ich mit
/dieseite.php?login=true
das system sofort ausgehebelt hätte
aber ich lerne gern dazu wie würdest du das absichern? ich bin bisher bei meinen projekten auch immer den weg gegangen, jeden seitenaufruf neu zu prüfen

mfg
__________________
[A. Einstein]
"Man hat den Eindruck, daß die moderne Physik auf Annahmen beruht, die irgendwie dem Lächeln einer Katze gleichen, die gar nicht da ist."
jsb ist offline   Mit Zitat antworten
Alt 06.12.2002, 10:49   #7
TP-Member
 
Registriert seit: Jan 2002
scooter macht alles soweit korrekt
Hört sich sehr gut an!
Aber wie funktioniert das mit der Session?

Gruß
Scooter
scooter ist offline   Mit Zitat antworten
Alt 06.12.2002, 15:17   #8
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Zitat:
hmm, also ich würde meinen, dass ich mit
/dieseite.php?login=true
das system sofort ausgehebelt hätte
Das stimmt nur unter folgenden zwei Bedingungen, nämlich

a) dass die Überprüfung von $login im 'Haupt-Scope' (nennt man das so?), also 'direkt im Script' und nicht in einer Funktion stattfindet und

b) register_globals aktiviert ist und das Script nicht explizit die Superglobals $_GET, $_POST usw. verwendet.

register_globals ist zwar (noch) bei allen(?) Hostern aktiviert, dennoch sollte man für neue Scripts besagte Superglobals verwenden, weil man damit eben genau diese Sicherheitslücke schließt.


Ich selbst löse die Session-Weitergabe das Zustands 'eingeloggt' bei meinem aktuellen Projekt allerdings auch, indem ich Benutzername und Passwort 'merke' und bei jeder Anfrage den Abgleich durchführe.
Der Grund ist schlicht, dass ich im Script nicht nur wissen will, ob der Benutzer eingeloggt ist, sondern auch um wen es sich handelt, mit allen Detailinformationen - insbesondere denen, die für die Rechteerteilung benötigt werden. Folglich muss ich den Datensatz so oder so bei jedem Aufruf holen.
Okay, natürlich könnte ich einfach alle User-Daten in der Session speichern, und dagegen hab ich auch garkein wirklich rationales Argument - so isses mir einfach lieber .
seb ist offline   Mit Zitat antworten
Alt 06.12.2002, 18:41   #9
TP-Specialist
 
Benutzerbild von the0bone
 
Registriert seit: Mar 2001
Ort: NDS
the0bone ist auf einem guten Weg
Zitat:
Original geschrieben von Adagio
Sprich - bei jedem Seitenaufruf machst Du einen Datenbankzugiff?
Brauche ich ja sowieso!
Jede Seite bekommt wichtige Informationen aus der Datenbank. Somit ist die Verbindung ja schon offen und ich brauche nur auf eine andere Tabelle zugreifen.
__________________
the0bone

Wissen ist Macht, nichts Wissen macht nichts!
the0bone ist offline   Mit Zitat antworten
Alt 06.12.2002, 18:51   #10
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Stimmt, das wollte ich eigentlich auchnoch sagen - ich hab bei mir pro Aufruf etwa 20 - 40 Queries (in einem Testsystem, das praktisch noch leer von wirklichen Inhalten ist, d.h. es werden später locker noch einige dazukommen). Jedenfalls macht da ein Query mehr oder weniger nicht viel aus.
seb ist offline   Mit Zitat antworten
Alt 06.12.2002, 20:33   #11
TP-Veteran
 
Benutzerbild von jonemo
 
Registriert seit: Dec 2002
Ort: london
jonemo macht sich hier sehr viel Mühe
1. kann man deine systemaushebelung leicht umgehen, indem man nicht einfach die variable $login abfragt, was sowieso nur mit registor_globals = OFF geht, sondern das einfach mit $:SESSION['login'] macht.

zu euren query massen: also ich versuche immer die querys zu minimieren. ab einer gewissen anzahl bremst es die seite aus. ich weiß ja nicht, was du - seb - für seiten machst, aber ich denke mit einer guten scriptplanung kann man doch auf eine kleinere zahl´kommen.

um nochmal aufs sessionmanagement zurückzukommen:
es geht wirklich am einfachsten und vor allem effizientesten biem login alle daten abzufragen, die es über den user zu wissen gibt. bei mir stehen die alle in einem array namens $user[], welches ich am anfang jeder page via $user[] = $_SESSION['user'] abhole. damit habe ich alle user-relevanten daten immer zur hand und gut verpackt.
__________________
the daily london photo
jonemo ist offline   Mit Zitat antworten
Alt 06.12.2002, 23:54   #12
TP-Member
 
Registriert seit: Jan 2002
scooter macht alles soweit korrekt
Hmm...
Ich konnte dem ganzen nicht so ganz folgen, da ich noch überhaupt nichts mit Sessions zu tun hatte.
Verstehe ich das soweit richtig?

<?php
...hier ist mein Formular der Loginseite...
...Name und Passwort wird eingegeben...

if ( $user == "xyz" && $passwd == "irgendwas" )
{
session_start();
$var = "login";
session_register("$var");
...hier steht der Link...
}
else{
...tue nichts...
}

...auf der nächsten Seite wird abgefragt...
if ($HTTP_SESSION_VARS["var"]== "login" )
{
...hier geht's weiter...
}
else{
...es geht nicht...
}

Ich muss aber bei jedem weitern Link die SessionID mit
sid=".$PHPSESSID."
übergeben?
Und solange das Fenster nicht geschlossen wird ist man angemeldet?
Ich brauche dann aber noch mehrere Infos zu den User aus der DB, und ganz wichtig eine UIN, die gesetzt wird, wenn man sich anmeldet und abgelaufen ist, wenn man das Fenster schließt.
Wie mache ich das?

Kann man die Anmeldung auch mit einem Cookie machen das bleibt, damit man sich nicht dauernd anmelden muss?


Vielen Dank!
Scooter
scooter ist offline   Mit Zitat antworten
Alt 07.12.2002, 00:24   #13
seb
TP-Veteran
 
Registriert seit: Jan 2002
seb bringt sich richtig einseb bringt sich richtig ein
Zitat:
zu euren query massen: also ich versuche immer die querys zu minimieren. ab einer gewissen anzahl bremst es die seite aus. ich weiß ja nicht, was du - seb - für seiten machst, aber ich denke mit einer guten scriptplanung kann man doch auf eine kleinere zahl´kommen.
Ich wusste, dass irgendjemand was dazu sagen würde

Die Sache is die - Dieses Script ist kein 'herkömmliches' Guestbook oder Forum oder sonstwas, das auf einen einzigen Verwendungszweck hin konzipiert und angepasst ist. Es soll vielmehr etwas sein, was man garnicht so einfach erklärn kann - im Grunde ein 'Application Framework', falls dir der Ausdruck was sagt.
Das bedeutet, dass es eigentlich nichts tut, ausser eine Basisumgebung bereitzustellen, auf die die eigentlichen Anwendungen wie News, Forum usw. aufgesetzt werden. Deren Programmierung ist entsprechend einfach und vergleichsweise schnell zu erledigen, da der Großteil des erforderlichen Codes ja bereits vorhanden ist. Zudem lassen sich die einzelnen Module sehr gut miteinander verknüpfen und verschmelzen....hm, ich seh, ich müsst hier sehr ins Detail gehen, um die Idee dahinter und das Funktionspinzip zu erklärn - dabei wollt ich eigentlich nur was zu den vielen Queries sagen:

Ich bin sicher, dass sich das noch an einigen Stellen optimieren lässt, bin aber genauso davon überzeugt, dass der aktuelle Zustand durchaus schon recht effektiv ist. Zwischen den Phasen, in denen ich irgendwelche neue Funktionalität dazuprogrammier, geh ich immer wieder den Code durch und such nach Stellen, die optimiert werden können. In letzter Zeit find ich immer weniger - mein Programmierwissen ist dabei mittlerweile ausgereizt, das System läuft für meine Erwartungen ausreichend schnell und stabil und der Kern ist so gut wie fertig.
Die vielen Queries ergeben sich einfach aus dem Arbeitsprinzip dieses Scripts - ich wüsste nicht, wie ich das noch verbessern könnte. Aber wie gesagt, um das genauer zu erklären, müsste ich weit ausholen.
seb ist offline   Mit Zitat antworten
Alt 07.12.2002, 00:40   #14
TP-Specialist
 
Benutzerbild von the0bone
 
Registriert seit: Mar 2001
Ort: NDS
the0bone ist auf einem guten Weg
Zitat:
Original geschrieben von scooter
... eine Menge Code...
Hi!

Ich stelle dir hier mal ein paar Codes aus meiner Seite zur Verfügung!

session wird immer ganz oben gestartet:
PHP-Code:
session_name("deine session");
session_start(); 
dann wird die Datenbank connectiert um Daten für die Seite auszulesen
PHP-Code:
   @mysql_pconnect... 
Auf der LogIn Seite kommt dann:
PHP-Code:
if(!isset($thisname)&&!isset($thispass)||$thisname!=$admin_name && $thispass != $admin_pass) {
print 
"<h3>Bitte einloggen!</h3>
<form action=\"login.php\" method=\"get\">
<p>LogIn Name:</p><input type=\"text\" name=\"thisname\"><br>
<p>Passwort:</p><input type=\"password\" name=\"thispass\"><br><br>
<input type=\"submit\" value=\"LogIn\" name=\"button\">&nbsp;
<input type=\"reset\" value=\"Clear\"></form>"
;}
elseif(
$thisname == $admin_name && $thispass == $admin_pass){
session_register("thisname");
session_register("thispass");
print 
"<p>Admin eingeloggt!</p>";} 
auf deutsch :
Die Daten admin_name und admin_pass werden aus der datenbank oder einer configFile geladen. Wenn der Admin nicht oder falsch eingeloggt ist, kommt das Form. Beim drücken von Senden bleibt man auf der Seite und die Seite wertet sich selbst aus.
Falls der versendete Adminname und das Adminpasswort stimmen, werden diese Werte in der Sesion gespeichert und dem User dieses angezeigt.

Aus jeder Folgeseite mit Zugriffsschutz kommt dieser Code:
PHP-Code:
if(!isset($thisname)&&!isset($thispass)||$thisname!=$admin_name && $thispass != $admin_pass) {
    print 
"Sie haben keine Berechtigung diese Seite zu betreten!";
} elseif(
$thisname == $admin_name && $thispass == $admin_pass){ echo "Geheime Seite!";} 
translate: Falls die Variablen thisname und thispass gar nicht gesetzt sind, kommt gleich ein Fehler. Dann müssen die beiden Vars auch noch mit den Werten der DB übereinstimmen, sonst wieder die Fehlermeldung.
Erst wenn beide mit der Werten der DB übereinstimmen, kommst du auf die Geheime Seite.
__________________
the0bone

Wissen ist Macht, nichts Wissen macht nichts!
the0bone ist offline   Mit Zitat antworten
Alt 07.12.2002, 00:47   #15
TP-Specialist
 
Benutzerbild von the0bone
 
Registriert seit: Mar 2001
Ort: NDS
the0bone ist auf einem guten Weg
Zitat:
Original geschrieben von scooter
Ich muss aber bei jedem weitern Link die SessionID mit
sid=".$PHPSESSID."
übergeben?
Nö! Beim Erzeugen einer Session sendet PHP automatisch einen Cookie an den Browser, welcher die SID enthält. Im Normalfall wird dieser gelöscht, wenn der Browser beendet wird.

Gefahr droht hier nur, wenn der User keine Cookies annimmt.

PHP kann man jedoch mit einer Option kompilieren, dass es automatisch alle Links und Formulare mit der SID erweitert... da sollte evtl. mal einer der Server Spezies was zu sagen "-enable-trans-sid"

Um sicher zu gehen, kannst du dieses natürlich auch von Hand machen.
__________________
the0bone

Wissen ist Macht, nichts Wissen macht nichts!
the0bone ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
Wie macht man am besten eine User-Anmeldung? Wie macht man am besten eine User-Anmeldung?
« grafik ein binden ? | PHP - Access, geht das? »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:14 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67