Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP Übersicht der angemeldeten User - wie User-Anzeige löschen beim Verlassen der Seite?

Frage Entwicklung PHP

Mitglied: marco1234

marco1234 (Level 1) - Jetzt verbinden

15.07.2010 um 15:50 Uhr, 5473 Aufrufe, 9 Kommentare

echo $freundliche_begruessung;

Ich möchte gerne eine Übersicht der Benutzer, die auf meiner Seite angemeldet sind, erstellen. Das Herausfinden des Users ist ja kein Problem. Jeder User, der sich anmeldet, kann ich ja einfach in eine Datenbank schreiben. Wenn sich der User wieder (korrekt) abmeldet – die Sessions geschlossen wird – könnte ich den User auch wieder löschen. Alles kein Problem!

Nur, was ist, wenn der User das Browser-Fenster einfach schliesst? (Was ja leider oft der Fall ist xD) Dann bleibt mein Eintrag ja in der DB vorhanden. Und mit JavaScript irgendwie abfragen, ob das Fenster geschlossen ist, hilft mir ja auch nicht viel, da ich aus JavaScript keine SQL Abfragen senden kann.
An einen Timer, der den User nach einer gewissen Zeit löscht, habe ich auch schon gedacht. Nur wo soll dieses Script laufen?

Kennt jemand eine Lösung? Wie macht man das sonst so? Es gibt ja viele Seite (hier im Forum ja auch), wo man sieht, wer angemeldet ist.

Danke und Gruss
Marco
Mitglied: godlie
15.07.2010 um 15:54 Uhr
Hallo,

mit AJAX könntest du aus Javascript heraus einen Call auf eine php Datei machen welche dir dann deinen Eintrag aus der DB wieder entfernt.
Aber ich glaube du bist mit dem window_onbeforeunload event eher besser bedient...
Bitte warten ..
Mitglied: marco1234
15.07.2010 um 16:58 Uhr
Ja aber kann ich mit JavaScript dann noch ein PHP-File aufrufen, das ausgeführt wird? :-S
Bitte warten ..
Mitglied: Coder2007
15.07.2010 um 17:50 Uhr
Mach das doch mit Sessions, so lange die Session existiert ist der User online. Wird das Fenster geschlossen wird nach einer gewissen Zeit ja auch die Session beendet. Ich hatte sowas mal irgendwann realisiert, ist aber schon ewig her.

Coder
Bitte warten ..
Mitglied: EvilMoe
15.07.2010 um 18:14 Uhr
Wie du schon sagtest, beim login -> DB schreiben.
Logout -> aus der DB löschen.

Das sollte klar sein. Nun brauchst du eine art "Cronjob". Du musst zusätzlich ein "Timestamp" speichern wann der User die letzte Seite geladen hat. Diese bei jedem Seitenaufruf aktualisieren.
Wenn die Zeit größer ist als z.B. 2min kann man davon ausgehen das er nicht mehr online ist -> aus der DB löschen.

Den Cron dann z.B. jede Minute einmal aufrufen lassen.
Oder einfach bei jedem Seitenaufruf, so intensiv ist das SQL Statement nun auch nicht ;)
Bitte warten ..
Mitglied: dog
15.07.2010 um 19:31 Uhr
Wo ist das Problem?
Du fügt in der DB einen Timestamp last_seen hinzu und suchst dann bei den angemeldeten usern nach WHERE last_seen > (NOW() - 5)
Den Timestamp aktualisierst du bei jedem Seitenaufruf.

Viel mehr lässt sich eigentlich darüber streiten ob es Sinn macht hierfür extra einen Haufen aufwändiger DB-Abfragen zu stellen...
Bitte warten ..
Mitglied: marco1234
16.07.2010 um 09:03 Uhr
Hallo zusammen

Vielen Dank für eure Antworten. Sind alles gute Ideen. Aber das Problem ist somit nicht ganze gelöst. Ich kann schon ein Job laufen lassen, der alle 2min den User löscht. Aber woher weiss ich, dass dieser User jetzt wirklich nicht mehr auf der Seite ist?

Immer die aktuelle Zeit eintragen, wenn der User die Seite wechselt geht nicht gut, da ich genau eine Datei habe und alles weitere hineingeladen wird. Dann müsste ich ja hinter jedem Button und jedem Link eine SQL Abfrage einrichten, welche die Zeit verlängert… sehr umständlich… :-S

Geht’s nicht einfacher?

@dog
Wie würdest du es machen? Mir fällt ausser DB eigentlich nichts sinnvolles ein…

Gruss
Marco
Bitte warten ..
Mitglied: godlie
16.07.2010 um 13:33 Uhr
Hallo ja das kannst du mit AJAX realisieren.
Einfach ein wenig googeln stichwort jquery oder scriptacolous
Bitte warten ..
Mitglied: EvilMoe
16.07.2010 um 15:57 Uhr
Warum für jede Seite ein SQL abfrage? Du sagst doch eben selber das du eine Datei hast und den rest "includest". Dann brauchst du nur in der einen Datei den SQL Befehl eintragen, mehr nicht.
Der SQL Befehl wird nichtmal eine Millisekunde dauern, das sollte nicht das Problem sein.

Umständlich ist das rein garnicht. Kinderkram ist das, du machst es dir nur einfach zu schwierig.
Man könnte es noch mit JavaScript kombinieren, aber nicht jeder hat es aktiviert.
Bitte warten ..
Mitglied: marco1234
06.09.2010 um 16:50 Uhr
Hab’s jetzt so gelöst:

Wenn ein User sich anmeldet, wird sein Benutzername und die Zeit in die DB eingetragen. Wenn er sich korrekt via Logout abmeldet, wird er aus der DB gelöscht.

Jedes mal, wenn ein User die Seite öffnet, werden alle User aus der DB abgerufen und es wird überprüft, ob die letzte Aktivität älter als 20min ist. Wenn ja, wird dieser User gelöscht bzw. abgemeldet.

Die Zeit des entsprechenden Users wird bei jeder Aktualisierung der Seite (POST etc.) aktualisiert. Somit aktualisiert der User beim Benützen der Seite immer seine Lifetime.

Lg
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Server
gelöst Wie AD User sauber löschen? (34)

Frage von McLion zum Thema Windows Server ...

Windows Server
Active Directory User löschen inkl Profilordner (23)

Frage von aif-get zum Thema Windows Server ...

Windows Server
User-ID zu Application Crash

Frage von pablovic zum Thema Windows Server ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...