PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie programmiet man Login am sinnvollsten?



Gorn
01-11-2002, 08:28
Hi Leute,

ich habe ein normales Login Formular mit einem Formular geschrieben, und setzt druch das Login in der Usertabelle den User in der Spalte Login auf true (so kann ich beim Start anzeigen wer alles logged ist).

Doch irgendwie gefällt mir das nicht. Wenn jemand sich nicht ausloggt bleibt der Status im der Tabelle bestehen...

Hat da einer ne gute Idee?
Wie programmiert ihr sowas?


GoRn

msi
01-11-2002, 10:17
Hi,

lies dir zuerst das mal durch: http://www.fruiture.de/perl/questions.html
Ich würde das so machen: das ganze mit sessions machen,
so kannst du den user immer authentifenzieren, wenn er sich
im Formular einloggt, in der mysql db in eienr looged_in table
die sessionid und die zeit eintragen (evtl. noch das was er gerade macht).
Wenn der User dann eine neue Seite abruft, dies in der logged_in table
vermerken und zeit auf die aktuelle Zeit setzen.

Um nicht mehr gebrauchte logged in sessions zu löschen,
einfach die mysql db nach zeiten durchsuchen die X sek
zurückliegen und diese löschen. Diese Funktion kannst
du immer dann aufrufen, wenn ein user sich einloggt,
oder eingeloggte user sehen möchte. Du kannst
diese Funktion natürlich auch per cron aufrufen.

Wenn du immer noch nicht genau weißt wie du das machen sollst,
schau dir die sourcen von phpbb mal an.

Gruß Markus

Gorn
01-11-2002, 11:06
Hi,

danke für die schnelle Antwort.
Du schlägst die Möglichkeit vor mit Sessions zu arbeiten - was ich bislang noch nicht gemacht habe .. (naja ertmal reinlesen).

Wird dies mit der Hilfe von PHPLIB gemacht? Ich habe mir ein PHP Buch gekauft in dem wird vorgeschlagen in der Datei local.inc eine class zu erzeugen mit der man ein Login gestalten kann. Sieht aber zu umständlich aus.

Ach ja, ich habe mir die Sourcen von phpBB 2.0 angesehen (verwende ja das Forum :-)) aber so richtig verstehen kann ich das da nicht.

Weisst Du wo man nen Tutorial finden kann - speziell zu diesem Thema?

THX

GoRn

msi
01-11-2002, 12:27
ein gutes tutorial kenn ich leider nicht,
aber schau dir doch mal die dokumentation
von php.net an.
Die finde ich echt gut (so hab ich php gelernt/so lerne ich php).
Da steht auch ne Menge zu Sessions.

Markus

Gorn
01-11-2002, 12:29
Cool, das werde ich machen - ich habe übrigens was gefunden:

http://www.trios.org/php/sessions/

Teste es gerade mal :-)

GoRn

Gaert
01-11-2002, 13:35
Hallo!

Ein ähnliches Thema gabs vor ein paar Tagen schon einmal... das nächste mal bitte auch mal die Suchfunktion benutzen!

http://www.mrunix.de/forums/showthread.php?s=&threadid=30198

Xerxes
01-11-2002, 21:35
sessions lassensich auch ganz gut mit mysql lösen.
einfach eine tabelle mit allen session-infos (auslaufzeit der session (z.B. 30min nach einloggen), ip, name, sid (=session id)). immer wenn sich einer ein-loggen will oder das script prüft, ob noch ein user eingeloggt ist, werden dann die einträge gelöscht, deren zeit abgelaufen ist.
wenn du willst, kann ich dir mein script ja mal mailen. :)

Gorn
02-11-2002, 08:13
Oh jajaja!

Das ist ne Super Idee

breorg@gmx.de


GoRn :-)

Xerxes
02-11-2002, 11:41
ist unterwegs. :)

Gorn
02-11-2002, 12:25
super danke - ich werde es testen :)

GoRn

Gorn
02-11-2002, 13:20
puh, wow - das muss ich erstmal alles durcharbeiten - ich habe nämlich bereits ne Seite gebaut und jetzt muss ich alles umschreiben usw. (bei mir heissen die Variablen alle anders ..)

Ach ja - kleiner Tip, es is wird schon etwas übersichtlicher wenn jedes Fled in den Tabellen anders heisst- die user_id wird bei doppelt belegt, steht zwar das gleiche drin, aber es kommt aus zwei verschiedenen Tabellen :-)

Wenn alles klappt schick ich hier mal ne URL auf der man den login testen kann ... großes THX!

GoRn

Xerxes
02-11-2002, 16:47
hehe, user_id ist aber auch nahezu das einzige feld, dass doppelt vorkommt. ansonsten kriegen sie halt immer den tabellennamen als prefix davor (wie bei den sessions z.B.) ;)

Gorn
02-11-2002, 16:50
stimmt :-)

Ich lasse die Prefix weg - und tippe das ganze komplett um ... wow was ne Arbeit - ach ja in dem Script fehlen einige ; macht aber nichts.

GoRn

Gorn
03-11-2002, 09:44
Juhu es klappt!

Er macht nur noch kleine Fehler:

1. Call to a member function on a non-object - in dieser Zeile :
$db->free_result();

2. Call to a member function on a non-object - in dieser Zeile :
$db->close_db();

3. $login_pwd = md5( $_REQUEST['login_pwd'] )

Wenn ich md5 drin lasse klappt es auch nicht - dann stimmt das pwd nicht mir dem in der Tabelle überein, in dieser Zeile:

$sql = "SELECT adnummer FROM admin WHERE adname = '$login_username' && adpasswort = '$login_pwd'";

Muss hier auch md5 rein?

GoRn

Xerxes
03-11-2002, 17:57
oh. das $db->free_result() kommt von meiner mysql-klasse. hatte ich vergessen raus zu nehmen.... ;)

die sache mit dem pwd läuft so: in der datenbank steht das md5-verschlüsselte passwort des benutzer.
(z.B. Hund -> aku43n3ökj343 ).
der user tippt sein passwort normal ein. das script verschlüsselt es dann md5 (wenn der user das richtige passwort eingetippt hat, kommt der gleiche schlüssel raus, also wieder 'ku43n3ökj343'.
Wenn die beiden schlüssel gleich sind, kann er eingeloggt werden, ansonsten eben nicht.
bei dir hat es vermutlich nicht geklappt, weil die passwörter in deiner db entweder gar nicht oder anders verschlüsselt wurden. ;)

Gorn
03-11-2002, 18:34
Das pw ist garnicht verschlüsselt!!!

thx

GoRn