Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

automatischer Logout!

Hi,

ich möchte dass wenn ein Benutzer sich nicht normal auslogt sondern einfach das Fenster schließt, er zB nach 10 Minuten automatisch ausgelogt wird. Man könnte also zB in der DB ein Feld LastAction machen wo während er auf der Seite ist immer wieder die aktuelle Zeit reingeschrieben wird. Wenn er nun das Fenster schließt erfolgt keine Aktualisierung mehr. Wie kann ich aber jetzt die DB prüfen lassen wie lange die LastAction her ist? Kann ja kein PHP-Skript nehmen, da es ja ausgeführt werden müsste und das wird es ja net wenn keiner auf der Seite ist. Kann die DB irgendwie selbst so eine Prüfung durchführen und wie funktioniert das dann?

MfG Baweg

Hier gehts zum Orginal Eintrag "automatischer Logout!" im Forum

Antworten

Zitat:
Baweg postete
Hi,

ich möchte dass wenn ein Benutzer sich nicht normal auslogt sondern einfach das Fenster schließt, er zB nach 10 Minuten automatisch ausgelogt wird. Man könnte also zB in der DB ein Feld LastAction machen wo während er auf der Seite ist immer wieder die aktuelle Zeit reingeschrieben wird. Wenn er nun das Fenster schließt erfolgt keine Aktualisierung mehr. Wie kann ich aber jetzt die DB prüfen lassen wie lange die LastAction her ist? Kann ja kein PHP-Skript nehmen, da es ja ausgeführt werden müsste und das wird es ja net wenn keiner auf der Seite ist. Kann die DB irgendwie selbst so eine Prüfung durchführen und wie funktioniert das dann?

MfG Baweg
Du hast Recht: PHP kann nicht ohne expliziten Aufruf verarbeitet werden.
Aber bevor keiner auf deine Seite geht, ist ein nicht gemachter Logout auch ja egal.
Ausserdem kann ja User A auch den "Kickout"-Code für User B ausführen.
Du musst nur darauf achten, dass der "kickout"-Code vor dem Logincheck erfolgt.
Wenn du den Loginstatus über ein Feld regelst, ungefährt so (wenn LastAction ein timestamp ist):

Code:                   In Zwischenablage kopieren (nur IE)
1">

So würde ich´s zumindest machen.


2.

Hi

Das könntest du mittels cron-Job erledigen.

Alle paar Stunden startet cron ein 'Putz' Script, welches die LastAction prüft und entsprechende Aktionen ausführt


3.

<denk>
An einen Cronjob hab ich auch schon gedacht. Aber das ist bei einem Userscript nicht sinnvoll, da man da ja mit Minuten arbeitet, statt mit Stunden.
Bei vielen Hostern ist ein cronjob auch gar nicht im Webspace-Paket enthalten.

Ausserdem finde ich persönlich einen cronjob für diese Aufgabe zu mächtig.
Das wäre meiner Meinung nach erst bei >5000 User sinnvoll.Ich finde, man sollte die cronjob-Liste so leer wie möglich halten
und solche kleinen Aufgaben lieber per Script lösen.

</denk>


4.

Warum aufräumen.... ich sehe da erstmal keinen Sinn drin!

Die Session hat ihren Timeout, dann ist sie weg...

Und der Last Action Eintrag kann doch auch bis zum nächsten Login stehenbleiben, oder nicht?


5.

schliesse mich combie an...ist ne sache der session und dafür gibt es den timeout...
dann sind die user draussen nachdem sie das fenster geschlossen haben...
und ruh ist....
und dein last action hero eintrag kannst du dir sparen ;-)


6.

hmmm benutzer leider kein Sessions, versteh das net so ganz bzw. krieg es nicht ans laufen...außerdem will ich es ja auch so machen, dass andere User die gerade online sind zB immer ne Liste sehen können wer alles noch online ist und da bringen mir ja Sessions mit TImeout doch nix oder?


7.

Sessions und Login kommen fast immer zusammen vor.
Da solltest du dich evtl. mal einarbeiten, lohnt sich!
http://de2.php.net/manual/de/ref.session.php


Zitat:
zB in der DB ein Feld LastAction machen
Das reicht doch für die OnlineAnzeige!!


8.

hmm also hab es jetzt mal mit javascript evruscht wo halt bei onUnload noch schnell ein PHP-Script geladen werden soll dass den Benutzer auslogt. Hat aufm PC mim Apache Server auch super geklappt, allerding läuft es aufm Server nicht, er scheint zu langsam zu sein. Also hab immernoch net verstanden wie man mit Sessions das Problem lösen soll. Selbst wenn man den Sessions ne Lebensdauer gibt weiß doch immernoch net die Datenbank bescheid. Ich möchte, dass sobald jemand nicht mehr auf meiner Seite ist sofort oder von mir aus nach 5min oder so in die DB in das FEld online ein "nein" oder so geschrieben wird. Sowas muss doch gehen....


9.

Zitat:
onUnload
Kannste knicken! Dafür sind zuviele ohne JavaScript unterwegs. Ausserden müsstes du im onUnload ein Popup aufmachen. Damit der Server das ordendilch mitkriegt. Da auch sehr viele Besuche mit Popupblockern unterwegs sind, wird das auch nix. Ausserdem wird das nicht gern gesehen.

Zitat:
Sessions
helfen dir bei deinem Problem nicht, können dich aber sehr gut bei deiner Loginverwaltung unterstützen!

Zitat:
nach 5min oder so in die DB in das FEld online ein "nein" oder so geschrieben wird
Mit einem Cronjob möglich, ist aber von hinten durch die Brust ins Auge

Zitat:
Man könnte also zB in der DB ein Feld LastAction
Das ist noch deine beste Idee!!

Vorschlag:
Du hast doch bestimmt eine Usertabelle! Da macht du das LastAction Feld rein.
Bei JEDEM Zugriff eines Users machst du da einen Update mit time() !

Code:                   In Zwischenablage kopieren (nur IE)
2">




10.

// korrektur
Code:                   In Zwischenablage kopieren (nur IE)
3">




11.

hmm stimmt is ne gute Idee. So wärs machbar... nur müsste ich mich halt auf ne Zeit einigen anchder der User als offline gilt... Es könnte ja zB ein User noch auf meiner Seite sein, aber er geht vom PC weg und öffnet somit zB keine Script mehr und somit würde die Zeit in LastAction nicht mehr aktualisiert und für die andern gilt er als offline obwohl ers net ist... könnte man vllt mit nem versteckten Frame machen, indem ein Script nur für die Zeitaktualisierung ist, dass halt aus ner Schleife besteht die alle 5 min die Zeit erneuert in der DB...das würde ja heisßen solange er auf unserer Seite ist wird alle 5 min die neuste Zeit eingetragen und man sieht dass er noch online ist... wäre das so möglich?


12.

Zitat:
wäre das so möglich?
Klaro! Aber ist das auch wirklich nötig?
Setzt doch die Zeit besser auf 15min hoch....


13.

hmm das mit der Schleife klappt irgendwie net. Da kackt mein Apache-Server immer ab. Also ich hab eine HTML-Datei, die in 3 Frames geteilt ist und das oberste Frame ist die folgende php-Datei die halt immer die Zeit aktualisieren soll...

Code:                   In Zwischenablage kopieren (nur IE)
4">




14.

while(true) <<-- das ist schon eine Ewigkeit!!
Wenn ich da ein Indianer wäre, würde ich auch abkacken :D


15.

hmmm aber es soll doch die ganze Zeit (=>endlos) laufen. Und nur weil die Schleife endlos ist wird sie dadurch ja net mehr arbeit.... und eigentlich tut er ja nur alle 10min überhaupt was, ansonsten läuft er einfach nur eine leere SHcleife durch und prüft halt die Bedingung... Also wäre so ein weg auch nicht zu verwirklichen oder was?!


16.

Neee, so ist das kappes...

Und überhaupt, ich mag diese heartbeat Geschichten sowieso nicht!

Nichts desto Trotz:
Dein Frameset sollte min 2 Frams beinhalten.
1 für den Content und einer für den heartbeat.
Der ContentFrame bekommt 100% und der Andere 0%

------------------------------------

heartbeat.php: (ruft sich alle 900 Sekunden selber auf)
Code:                   In Zwischenablage kopieren (nur IE)
5">




17.

Jo so klappts....ich hoffe ma dass jetzt nicht wieder irgendwas dazwischen kommt... vielen Dank


18.

Es ist wirklich unklug der vom Browser kommenden "Benutzer-ID" zu vertrauen :)
Lesen --->>> http://de2.php.net/manual/de/ref.session.php
Das dürfte viele deiner Problemchen erschlagen.........


19.

Ich benutze ja garkeine Browser-ID. Ich lass beim Login nen Code generieren, der dann in die DB geschrieben wird. Der wird dann immer übergeben und über den wird der Benutzer festgelegt...Aber ich werd mir das mit den Sessions ma angucken müssen... WErd dann wohl alles nochmal umschreiben müssen...


20.

Zitat:
nen Code generieren
Das ist doch die von mir erwähnte Benutzer-ID!
(zumindest deine variante davon)

Und die kommt doch immer wieder vom Browser, oder nicht....


21.

Was heißt vom Browser?... Bei jedem Seitenwechsel übergebe ich den Code zB so... bla.php?code=$code.... auf der neuen Seite wird dann erstmal geprüft ob dieser Code in der DB steht....


22.

Schreib den Code doch einmal in $_SESSION rein, dann braucht der NIE wieder übertragen zu werden!




Teste mal:
---------------
Datei1.php
Code:                   In Zwischenablage kopieren (nur IE)
6">

---------------
Datei2.php
Code:                   In Zwischenablage kopieren (nur IE)
7">

http://de2.php.net/manual/de/ref.session.php


23.

Ja, aber dann muss ich doch jedesmal die Session-ID übergeben und dann bleibts ja wieder beim gleichen oder net?


24.

Zitat:
Ja, aber dann muss ich doch jedesmal die Session-ID übergeben und dann bleibts ja wieder beim gleichen oder net?
Nein, "oder net".

Wie wäre es, wenn Du Dich dazu herablassen würdest, eine Dokumentation zu lesen (über Sessions zum Beispiel)? Ich meine, alle die Du hier mit Deinen unsäglichem Käse malträtierst, die haben das auch alle gelesen - und es macht wirklich keine Freude, einem des Lesens zu faulen Menschen immer und immer wieder das gleiche vorzukauen.


25.

Wenn ich ich mich net über Sessions informiert hätte und noch keine Dokus gelesen hätte woher wüsste ich dann das mit der SID!?... Ich habe einige eBooks über PHP und mySQL, doch alle befassen sich mit dem Thema Sessions nur sehr knapp und in den meißtenhieß es, dass man immer eine SID übergeben muss die dann ja den Benutzer identifiziert. Sonst würde ja wenn 2 Benutzer gleichzeitig online sind der eine das aus der Session lesen können was der andere reingeschrieben hat und das wäre nicht gerade das was man will.... naja ich komm mit meiner Methode gut zurecht und werd wohl erstmal bei bleiben.... Trotzdem danke...


26.

Baweg, tu dir selbst einen gefallen und lies nochmal genauer nach. und wähle vielleicht deine informationsquellen sorgfältiger aus. die session-id wird automatisch weitergegeben, entweder in einem cookie, oder, falls cookies ausgeschaltet sind, über die url. darum musst du dich nicht kümmern. und nur weil du alleine mit deiner methode 'gut zurecht' kommst, heißt das noch lange nicht, dass andere damit klarkommen, geschweige denn die idee dahinter verstehen. allen anschein nach versuchst du eben genau so einen session-mechanismus 'von hand' zu programmieren. deshalb mein gut gemeinter rat: lies dich nochmal gründlich in sessions ein (so schwer ist das nämlich gar nicht) und arbeite damit. du erhöhst damit deine chancen auf gute beratung hier im forum ungemein und du wirst irgendwann feststellen, dass alles mit sessions viel einfacher klappt.

http://www.php.net/manual/de/features.sessions.php
http://www.php.net/manual/de/ref.session
http://php-faq.de/ch/ch-version4_session.html


Hier gehts zum Orginal Eintrag "automatischer Logout!" im Forum
 
phpforum.de | Impressum