Autor Beitrag
mcst09
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 112



BeitragVerfasst: Mi 28.06.06 19:06 
Hallo,

ich habe eine Netzwerkanwendung. Jetz habe ich in meiner Benutzerverwatung vor jedem User einen Punkt, grün wenn der User gerade eingeloggt ist, rot wenn er nicht eingeloggt ist.
Gemacht habe ich das so, dass direkt nach dem einloggen in der DB bei jedem User ein Flag gesetztr wird "ONLINE". Wird die MainFOrm.Destroy-Funktion aufgerufen, wird das Flag in der DB wieder auf 0 gesetzt.

Das ganze läuft gut, allerdings gefällt mir die Lösung nicht so, da ja doch relativ viele DB-Zugrife statt finden.

Meine Fragen daher:
Wie findet Ihr meine Lösung??
Wie würdet Ihr das machen?
Was kann ich besser machen?

Danke
Axl
Waldteufel
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 28.06.06 19:12 
Hi. :wave:

Ich finde die Lösung gut, eine bessere fällt mir jetzt auch nicht ein. :gruebel:
Ich würd's wahrscheinlich genauso machen...
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 28.06.06 19:57 
Verwaltest Du für deine Benutzerverwaltung eine Art "Session-Liste" mit für angemeldete User? Wenn dem so ist, könntest Du die angemeldeten User auch anhand der Session-Liste auslesen. Für eine genauere Analyse bräuchte man ggf. noch ein paar Informationen zur Art der Verbindung, wie die App arbeitet und wie Sitzungen gesteuert werden. Im Grundprinzip ist deine Lösung aber nicht schlecht.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
smokie
Hält's aus hier
Beiträge: 3

NT 4.0, Win XP, NT-Server, Server 2003
Delphi 5 Ent.
BeitragVerfasst: Do 29.06.06 19:51 
Wenn ich das richtig verstehe, meldet die Anwendung bei Start den User in der Datenbank an - entsprechend bei Ende ab.

Jeder Programmaufruf erfordert also 2 Datenbankzugriffe / User.

Ich habe das auch so gelöst.
Das Schicksal einer Datenbank ist nun einmal, daß auf sie zugegriffen wird. Wenn die Zugriffe sauber geregelt sind, brauchst Du dir über die Anzahl keine Gedanken zu machen.

Gruß
smokie
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 30.06.06 00:07 
Gut, dann wollen wir mal die schöne heile Welt zerstören ...

Was passiert, wenn einem die Anwendung über eine Abnormal Program Termination (unter Delphianern auch lapidar als "Exception" bezeichnet) um die Ohren fliegt und daher die Abmeldung nicht erfolgt?

1. Möglichkeit: Der User bleibt unendlich lange angemeldet. Beim nächsten Login-Versuch wird dieser Datensatz einfach überschrieben und alles ist gut.

2. Möglichkeit: Der User bleibt unendlich lange angemeldet. Beim nächsten Start greift ein "Sicherheitssystem", welches Mehrfach-Logins verhindert, wodurch im schlimmsten Fall der Administrator-Account nicht mehr in die Anwendung kommt.

Der erste Fall ist trivial und kann daher vernachlässigt werden. Wenn er auftritt, ist die dahinterstehende Anwendung relativ KISS gehalten und daher überschaubar. Interessanter ist der zweite Fall, da dieser wirkliche Probleme verursachen kann.

Gut, was hilft also gegen das zweite Problem: ein einfaches "LastActivityTime-Feld im Login-Datensatz, wodurch eine Art "Session" emuliert wird. Bevor dann nämlich ein Login ausgeführt wird, brauch mann einfach nur ein generelles UPDATE durchzuführen, mit dem man sagt:

ausblenden SQL-Anweisung
1:
UPDATE `users` SET `online` = '0' WHERE `LastActivity` < :CurrentTimestamp - :SessionLength					


Wobei sowohl :CurrentTimestamp als auch :SessionLength zwei Query-Parameter sind, mit dem aktuellen Timestamp, sowie der maximalen Inaktivitätsdauer, nach der ein User automatisch vom System abgemeldet wird.

2ct

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.