Userdaten nur EIN mal aus der DB auslesen und übergeben
Aquariophile
- programmiertechnik
Hallo!
Folgendes Problem:
User loggt sich ein.
Zum einleggen wird die Datenbank (MySQL) konnktiert,
und Username/Password überprüft.
Wenn beide korrekt - einloggen.
Gut, nun ist der User drin.
Aber jedes Mal wenn er eingeloggter Weise auf einen Link klickt,
muss ich ja, damit er erkannt wird, mit einem HIDDEN INPUT
seine Userkennung weiterreichen.
Damit das Script dann aber feststellt ob die übergebenen Variablen
korrekt sind, muss das Script ja wieder zur MySQL-DB konnektieren.
Fazit: 30 User eingeloggt, jeder klickt 100 mal herum,
sind das 3000 mal DB connect.
Wie kann ich machen, dass ich Username/Passwort nur EIN mal
überprüfen muss beim eileggen,
und dann den User automatisch erkennen lassen kann?
Ich hab mich mal ein bisschen Schlau gemacht in richtung
Session-ID, aber es scheint als müsste ich da die Session-Daten auch irgendwo (DB) speichern,
also erst wieder das selbe.
Was mir aber recht wäre, und ich schätze das geht ohne Session nicht,
dass sich der user nicht zweifach einloggen kann.
Also wenn er eigeloggter weise z.B. im OPERA
einen rechtsklick macht, und sagt
"Open Frame in new Window"
dann muss das neue Window das dann aufgeht riesig ERROR
ausgeben, keinesfalls wieder den Inhalt der im Frame sein müsste bei einem eingeloggten user.
Das sind also 2 Fragen,
DANKE! ;o)
Aquariophile
hi Aqua,
also ich habe das folgendermaßen gelöst:
user loggt sich ein, daten werden mit db-daten verglichen und in einer session die wichtigsten daten hinterlegt (ip,name, anschrift,..was weiß ich).
anschließend brauch ich nie wieder passwort und username zu überprüfen, da ichja die eindeutige session-id hab (einmal überprüft, einmal erzeugt). würd ich jedesmal passwort und username bei jedem klick übermitteln, könnten die auch leute in proxys lesen..wennd ie GET-Methode genutzt wird..also sehr unsicher.
stat dession ist die session-id der schlüssel, der dem user alles öffnet.
aaaber...auch den schlüessel kann man mopsen ;-) ... also noch sicherheitshalber die ip-adresse mit dem schluessel gegenchecken. die ip-adresse speicher ich ja zu der entsprechenden session (sessions handelt php selbst...die werden soweit ich weiß in temp-files gespeichert).
stimmt sessionid mit der IP, dann ist der user korrekt..andernfalls ..
ERROR ;-)
falls ich nen denkfehler hab..sagt es mir ;-)
Ciao the-FoX
www.breez.de
Wie auch schon per Chat beantwortet, nochmal für Alle, die es wissen wollen:
Frage 1:
Zwei Felder feld1 und feld2, die als hidden fields immer hin und her gereicht werden
feld1 wird mit IP, SessionID, Username und am besten noch ein paar randomnbytes gefüllt.
feld1 wird verschlüsselt (am besten asynchron als kleinen Bonus für den bösen Hacker)
von feld1 (schon verschlüsselt) wird eine checksumme gemacht (am besten nur von einem teil der bytes aus feld1)
feld2 wird mit checksumme gefüllt und dann auch verschlüsselt (mit anderem schlüssel)
bei jedem Klick checkt der Server meine IP und verläßt sich einfach auf die UserID.
Frage 2:
Das solltest du andersrum lösen:
Wenn neue Session geöffnet wird, dann wird die alte geblockt (ist einfacher, dann dürfen aber keine frames da sein)
Die SeesionID kriegt einfach ein Tag, in dem ne fortlaufende Nummer hochgezählt wird. Wenn die Nummer ein zweitesmal vorkommt (also ein zweiter Aufruf von einer Seite aus) dann wird die geblockt. Die Nummer muß man sich halt im Speicher bereithalten.
RichiH
was ich vergessen habe:
dass Alles natürlich über SSL nochmals sichern
RichiH
use Mosche;
Folgendes Problem:
User loggt sich ein.
Zum einleggen wird die Datenbank (MySQL) konnktiert,
und Username/Password überprüft.
Fazit: 30 User eingeloggt, jeder klickt 100 mal herum,
sind das 3000 mal DB connect.
Das ist gar nicht mal so schlimm, wenn du Apache::DBI verwendest. Damit bekommst du persistente Datenbankverbindungen, dann kostet das einloggen an der DB kaum noch Zeit.
use Tschoe qw(Matti);
Hallo!
- Ein mal Username/password checken... ^^
Ich habs mit htaccess und einem Apache-Modul erledigt (mod_auth_mysql), damit kannst du Benutzername und Kennwort aus der DB überprüfen, du mußt halt im .htaccess-File, die ganzen DB-Kennungen eingeben wie: Host, DB, Usertable, Userspalte, Passwortspalte, ob das Passwort verschlüsselt ist...
- Neues Fenster .. 2 mal eingeloggt -> Error .... ^^
mit dem .htaccess - Ding is das dann auch kein Problem mehr.
Is halt nur die Frage ob dein Provider das Modul installiert hat, bzw. es für dich installiert, oder (wie bei mir) du einen eigenen Server hast.
Falls irgendwer meint dass dies auf irgendeine Weise unsicher ist, bitte posten und wenn geht eine besser Möglichkeit aufzeigen. Danke.
gruß
harald
Hallo nochmal
- Neues Fenster .. 2 mal eingeloggt -> Error .... ^^
mit dem .htaccess - Ding is das dann auch kein Problem mehr.
'tschuldige, hab übersehen das du das NICHT willst, ja einfach Zeit in Tabelle speichern und erst nach einer gewissen Zeit wieder erneut einloggen lassen.
gruß
harald
Huhu Aquariophile
also ich habe für ein kleines CMS das Problem so gelöst, das ich die Daten der aktiven Sessions in einer eigenen Tabelle ablege.
Und zwar die session-ID, userlogin, login-time und active-time.
Damit habe ich dann auch alle Informationen um eine timeout-Funktionalität sowie das Verhindern von Mehrfachlogins( unter gleichem userlogin) zu realisieren.
Ein user ist also eingeloggt wenn unter seinem userlogin eine aktive session(active-time < timeout-zeit) in der Tabelle steht.
Bei jeder Aktion des users wird die active-time aktualisiert.
Vergisst er sich auszuloggen oder stürzt sein Browser ab muss er dann allerdings die Zeitspanne des timeouts abwarten bevor er sich wieder einloggen kann.
Viele Grüße
lulu