[PHP/MySQL] Registreren tijd dat user ingelogd is geweest

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Hallo!

Voor een intranet systeem waarbij alleen geregistreerde gebruikers toegang hebben (en dus eerst moeten inloggen), wil ik graag een overzicht krijgen van de tijd dat gebruikers ingelogd zijn geweest. Idealiter zou ik dus krijgen:

user A inlogd: 08:56, uitgelogd: 13:06 (totaal inlogd: 250 minuten)

En dat dan voor alle dagen en voor alle users, zodat ik daar statistieken op los kan laten.

Nu heb ik al een custom session handler, en ik vraag me af of ik die kan gebruiken voor het registreren van de inlog en uitlog tijd. De sessions zelf zijn natuurlijk geen goed uitgangspunt, omdat die weer verwijderd worden op het moment dat ze zijn verlopen.

Zijn er wellicht standaard manieren, of juist veel voorkomende fouten, die mij kunnen helpen bij de oplossing? Ik zie vooral een probleem, wanneer een gebruiker niet handmatig uitlogt, maar gewoon zijn browser-venster sluit. Dan heb je geen "harde" actie, en moet je dus middels een garbage collection o.i.d. actie ondernemen (en wellicht de laatste timestamp van de sessie nemen?).

Ik ben erg benieuwd naar de ideeën die men hierover zoal heeft!

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
kunt toch gewoon in een log de username, inlogtijd en eindtijd van de sessie plaatsen? (met evt. de sessieid)

Groepeer je op inlogdatum (heb je dus per dag), bereken je de tijd. En zo kun je creatief genoeg wezen. Of is dat te makkelijk gedacht?

[ Voor 5% gewijzigd door r0bert op 26-10-2005 16:51 ]


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Nou, ik ben nu aan het bedenken dat het mooi zou zijn om via de Session handler zowel het registreren van de inlogtijd als de uitlogtijd te regelen. Dan heb je de functies daarvoor allemaal bij elkaar. Maar dat wordt natuurlijk lastig, omdat je niet van elke sessie geregistreerd wil hebben wanneer hij is aangemaakt. Daar valt nog omheen te werken door alleen specifieke sessies te registreren (dat lukt dus nog)

Ik ben nu ook nog aan het zoeken naar een moment dat de sessie voor het eerst wordt aangemaakt. Die lijkt er in de sessie-functies niet te zijn ( _open wordt bij iedere session_start() weer aangeroepen). Dat zou dus betekenen dat ik moet kijken of er al een sessie geregistreerd met het gegeven session_id. Afhankelijk van het antwoord daarop moet ik dan in een andere tabel de inlogtijd van de gebruiker opslaan.

De uitlog-tijd is mogelijk lastiger, omdat dat dus ofwel via _destroy of wel via de garbage collection function moet gaan verlopen. Wanneer sessies dus op één van deze twee manieren uit de database worden verwijderd, moet daarvoor weer een entry in de "andere tabel" worden neergezet met de uitlogtijd voor die user.

Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb nog nooit met een dergelijke situatie gewerkt, maar als ik er over nadenk zou ik iets maken als;

- De gebruiker logt in en er wordt een databaserij aangemaakt met zijn username en starttijd.
- Tevens wordt een uniek sessie-ID aan de databaserij gekoppeld.
- Als de gebruiker een andere pagina bekijkt, wordt de database rij ge-update (d.w.z., de eindtijd wordt gewijzigd in de databaserij), nadat gekeken is of de gebruiker nog steeds ingelogd is met hetzelfde sessie-ID (anders krijg je een situatie dat de gebruiker op maandag inlogt, vervolgens zijn browser sluit met het kruisje en op dinsdag terugkomt waardoor het lijkt alsof de gebruiker de hele nacht doorgewerkt heeft).

Op deze wijze kun je goed bijhouden hoelang de bezoeker op het intranet verblijft, míts deze zo nu en dan een andere pagina aanroept. De enigste situatie die je hier niet mee opvangt is als een gebruiker een half uur langs naar een pagina gaat staren en vervolgens zonder te navigeren de browser afsluit. Je kunt twee dingen doen, afhankelijk van de complexheid van je applicatie en de brwoserinstellingen van je bezoekers;
of je acht de kans zeer klein dát dit gebeurd of je vangt het op met bijvoorbeeld Javascript (onunload is volgens mij de eventtrigger die je dan zoekt).

Succes.

Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
@ivy:

Slim ... dat is inderdaad een mooie oplossing! Daar ga ik even op verder borduren.

Fijn om af en toe even klankbord te hebben!

Acties:
  • 0 Henk 'm!

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 25-07 07:34

wizzkizz

smile...tomorrow will be worse

gvanh schreef op woensdag 26 oktober 2005 @ 17:03:
@ivy:

Slim ... dat is inderdaad een mooie oplossing! Daar ga ik even op verder borduren.

Fijn om af en toe even klankbord te hebben!
Zo heb ik dat idd ook geimplementeerd en dat werkt best fijn. Alleen is er in mijn situatie ook sprake van een actie die best meer dan een halfuur kan duren. Maar aangezien de gebruiker in dat geval een bericht (lees: artikel) aan het maken is, laat ik om de x minuten (als de gebruiker tenminste een y aantal acties (mousemoves/toetsaanslagen) heeft uitgevoerd de tijd van de laatste uitgevoerde actie updaten mbv ajax (werkt heerlijk ;)).
Een nadeel is wel dat als de gebruiker veel research aan het doen is, ik niet precies kan bijhouden hoe actief deze is in mijn app, dus moet de gebruiker opniew inloggen. Ik weet niet hoe jouw situatie in elkaar steekt, maar dit is wel een handige oplossing.

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.

Pagina: 1