[php/sessions] user slechts 1 keer inloggen

Pagina: 1
Acties:

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 16:10

Pelle

🚴‍♂️

Topicstarter
Ik moet een intranet-achtig iets gaan bouwen, en de bedoeling is dat de users die daar toegang toe hebben, slecht één keer tegelijk ingelogd mogen zijn.

Oftewel, het moet niet mogelijk zijn iemand anders je username en password te geven, waarmee die ander tegelijk met jou ingelogd kan zijn.

Het hele login-systeem werkt met sessions, en nu zoek ik dus een manier om na te gaan of iemand nog is ingelogd. Bij het inloggen wil ik de user in een tabelletje met actieve gebruikers zetten, maar zodra de browser wordt afgesloten moet de user weer uit die tabel gehaald worden.

Er zijn natuurlijk hele vieze javascript-oplossingen te bedenken waarbij onUnload een popup wordt geopend die weer een scriptje bevat dat de user uitlogt en vervolgens de popup weer sluit, maar ik heb het vermoeden dat dat veel mooier moet kunnen. Iemand enig idee?

  • Grum
  • Registratie: Juni 2001
  • Niet online
Elke keer als jij overnieuw inlogt heb je een andere sessionid.

Dus bijhouden in de database welke sessionid's er actief zijn bij welke users. Als een user dan op de page komt met een bepaald sessionid dan kijk je of die bestaat in de database, zo niet ? dan is z'n sessie verlopen of nooit actief geweest DUS moet ie overnieuw inloggen.

Bij het inloggen smijt je gewoon alle oude sessionid's van die bepaalde gebruiker weg (replace into bv) en zet je z'n huidige user/sessionid in de tabel.

Simple as that .. wel resource vretend .. maarja .. das de enige 'normale' oplossing.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Pelle:
Iemand enig idee?
Je zou in de tabel ook een timeout op kunnen nemen, nl. een timestamp met de laatste request van de user.
Bouw dan ook een scriptje wat alle logins verwijdert waarbij de tijd verstreken sinds de laatste request > dan bijvoorbeeld een halfuur is. Neem dit scriptje op je in crontab en klaar is kees.

eventueel:
Verplicht users uit te loggen: Neem een logout knop op in je ontwerp, en wanneer mensen het venster sluiten een confirm met "Wilt u uitloggen?", zo ja, redirect naar logout.php ofzo, en de user is uitgelogd.

zoiets :+

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 16:10

Pelle

🚴‍♂️

Topicstarter
Op maandag 13 mei 2002 11:58 schreef Grum het volgende:
Elke keer als jij overnieuw inlogt heb je een andere sessionid.

Dus bijhouden in de database welke sessionid's er actief zijn bij welke users. Als een user dan op de page komt met een bepaald sessionid dan kijk je of die bestaat in de database, zo niet ? dan is z'n sessie verlopen of nooit actief geweest DUS moet ie overnieuw inloggen.
Okee, maar stel ik ben een user en ik ben ingelogd. En ik heb mijn login-gegevens ook aan m'n collega gegeven. M'n collega logt ook in, en ziet: he kut, ik moet inloggen. Collega logt in, waarna de session-id van de actieve gebruiker natuurlijk verandert. En vanaf dat moment kan ik zelf dus niks meer doen, en moet ik zelf ook opnieuw inloggen. Zo kan er dus een leuk pingpong spel ontstaan van 2 users die de hele tijd opnieuw inloggen en daarmee elkaars session onbruikbaar maken.
Tuurlijk, dan moeten ze maar geen logingegevens uitwisselen, maar het is in ieder geval niet de meest ideale situatie.
Simple as that .. wel resource vretend .. maarja .. das de enige 'normale' oplossing.
Resources maak ik me op dit moment niet zo druk om... het vervelende vind ik dat een user pas uitgelogd wordt op het moment dat hij opnieuw inlogd, ajbwib.
Het mooiste zou zijn dat een user echt is uitgelogd als hij z'n browser afsluit, op het einde van z'n session dus.
Op maandag 13 mei 2002 11:58 schreef drm het volgende:
Je zou in de tabel ook een timeout op kunnen nemen, nl. een timestamp met de laatste request van de user.
Bouw dan ook een scriptje wat alle logins verwijdert waarbij de tijd verstreken sinds de laatste request > dan bijvoorbeeld een halfuur is. Neem dit scriptje op je in crontab en klaar is kees.
Ook aan zitten denken, maar dat is out of the question. Stel, iemand logt in, surft even verder, bedenkt dat hij iets is vergeten, surft weer terug en krijgt de melding: 'sorry, maare je bent niet ingelogd'. Niet echt gebruiksvriendelijk.
Verplicht users uit te loggen: Neem een logout knop op in je ontwerp, en wanneer mensen het venster sluiten een confirm met "Wilt u uitloggen?", zo ja, redirect naar logout.php ofzo, en de user is uitgelogd.

zoiets :+
Hmja, ook al aan gedacht, maar daarbij houd je hetzelfde probleem.. ik vind dat wanneer je je browser niet afsluit, je niet uitgelogd moet worden. En het verschil tussen een browser sluiten en een pagina unloaden door naar een andere site te gaan, is niet te detecteren.

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 03-09 22:43
Volgens mij was er hier laatst een topic over cookies en sessions. Waar het precies over ging weet ik niet meer (of ie uberhaupt nog bestaat weet ik ook niet, krijg namelijk veel code #29 de laatste tijd :(), maar iemand zei daar als je een cookie geen verlooptijd geeft hij alleen geldig zolang de browser open is. Sluit je de browser, weg cookie. Dus misschien dat dit een oplossing is (nogmaals: ik weet niet of het werkt).

  • Grum
  • Registratie: Juni 2001
  • Niet online
Je moet niet teveel voor je gebruiker denken dan krijg je dit nl nooit af. Er is altijd wel een manier om het te verzieken en tja als ze et perse willen ... laat ze dan ?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Pelle:
Ook aan zitten denken, maar dat is out of the question. Stel, iemand logt in, surft even verder, bedenkt dat hij iets is vergeten, surft weer terug en krijgt de melding: 'sorry, maare je bent niet ingelogd'. Niet echt gebruiksvriendelijk.
Vind ik niet. Kijk, als je 30 minuten (of vul in wat je wilt) niet op de site bent geweest, dan vind ik het niet zo gek dat je opnieuw moet inloggen. Helemaal als je de gebruikers van dit feit op de hoogte stelt, is het volgens mij een prima oplossing
Hmja, ook al aan gedacht, maar daarbij houd je hetzelfde probleem.. ik vind dat wanneer je je browser niet afsluit, je niet uitgelogd moet worden. En het verschil tussen een browser sluiten en een pagina unloaden door naar een andere site te gaan, is niet te detecteren.
Eigen schuld van de gebruiker, als je 't mij vraagt :+

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 13 mei 2002 11:53 schreef Pelle het volgende:
Oftewel, het moet niet mogelijk zijn iemand anders je username en password te geven, waarmee die ander tegelijk met jou ingelogd kan zijn.
Ik zou terugkijken naar welk doel dit dient.
Je zegt zelf eigenlijk al dat dit bedacht is om passworduitwisseling tegen te gaan.
Daar kun je ook andere maatregelen tegen nemen, zoals intruder detection of scherpere password regels.

Who is John Galt?


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 16:10

Pelle

🚴‍♂️

Topicstarter
Op maandag 13 mei 2002 13:03 schreef justmental het volgende:
Ik zou terugkijken naar welk doel dit dient.
Je zegt zelf eigenlijk al dat dit bedacht is om passworduitwisseling tegen te gaan.
Daar kun je ook andere maatregelen tegen nemen, zoals intruder detection of scherpere password regels.
My idea exactly, maar ik ging in dit geval niet over de ideeen maar over de uitvoering ervan :{

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 13 mei 2002 13:30 schreef Pelle het volgende:
My idea exactly, maar ik ging in dit geval niet over de ideeen maar over de uitvoering ervan :{
"Then make it your business!"

"Doordat http een stateless protocol is kan ik hier geen mooie oplossing voor bouwen."
"Maar ik kan nog wel goede alternatieven bedenken, kunnen we het daar even over hebben?"

Ik zou het zien als een uitgelezen mogelijkheid om me te profileren.

Who is John Galt?


  • leonardo1504
  • Registratie: April 2001
  • Niet online
maar zodra de browser wordt afgesloten moet de user weer uit die tabel gehaald worden.
Dat is dus niet mogelijk zonder iets client-side te doen. Als je je browser sluit weet de server waar je je sessies bijhoudt daar namelijk niets van (er wordt geen request gestuurd). Er zijn twee oplossingen mogelijk:
1. javascript, en bij een onClose event een logout-request sturen naar de server. Dit is niet fool-proof, want als je voor het sluiten van de browser eerst naar een ander domein surft ben je je event-handler en dus je logout kwijt.
2. uiteraard gebruik je session-cookies. Deze zijn weg als je je browser sluit (dus ook cleint-side). Als je een andere browser opstart krijg je een nieuwe sessie. Logt iemand op deze sessie in die al op een andere sessie was ingelogd, dan kan je alle oude sessies eerst weggooien (=uitloggen) OF de gebruiker actief die andere sessie(s) laten uitloggen (wel eerst het uitlog-wachtwoord vragen ;) ). Lijkt me ook geen elegante oplossing.

Je kan trouwens ook persistent cookies gebruiken. Dan kan je als iemand voor de tweede keer probeert in te loggen hem/haar vragen zijn oude sessie uit te loggen op de pc waar hij/zij de vorige keer was ingelogd.

Verwijderd

Op maandag 13 mei 2002 11:53 schreef Pelle het volgende:
[..]

Oftewel, het moet niet mogelijk zijn iemand anders je username en password te geven, waarmee die ander tegelijk met jou ingelogd kan zijn.

[..]
Hier geef je aan dat een user zijn username en password niet mag weggeven zodat er ook andere mensen onder zijn naam mogen inloggen.

Grum heeft hiervoor een ideale oplossing (MSN maakt hier bijvoorbeeld ook gebruik van), koppel een username aan een sessionid en er is altijd maar één pc (en dus user) die onder een bepaalde naam ingelogd kan zijn.

Dus dit
Op maandag 13 mei 2002 12:12 schreef Pelle het volgende:

[..]

Okee, maar stel ik ben een user en ik ben ingelogd. En ik heb mijn login-gegevens ook aan m'n collega gegeven. M'n collega logt ook in, en ziet: he kut, ik moet inloggen. Collega logt in, waarna de session-id van de actieve gebruiker natuurlijk verandert. En vanaf dat moment kan ik zelf dus niks meer doen, en moet ik zelf ook opnieuw inloggen. Zo kan er dus een leuk pingpong spel ontstaan van 2 users die de hele tijd opnieuw inloggen en daarmee elkaars session onbruikbaar maken.
Tuurlijk, dan moeten ze maar geen logingegevens uitwisselen, maar het is in ieder geval niet de meest ideale situatie.
[..]
staat volgens mij haaks op het vorige wat je zei. Hierbij zou je meerdere users onder één naam in willen laten loggen en dat is toch niet wat je volgens mij wilt.

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 16:10

Pelle

🚴‍♂️

Topicstarter
Op maandag 13 mei 2002 14:40 schreef bartm het volgende:
staat volgens mij haaks op het vorige wat je zei. Hierbij zou je meerdere users onder één naam in willen laten loggen en dat is toch niet wat je volgens mij wilt.
Maar dat is wel de achterliggende gedachte geweest; ze willen dus dat mensen hun password niet gaan verspreiden en derhalve moet er dus maar 1 sessie per username/password combinatie mogelijk zijn.

Ik zelf zie het probleem niet zo en vraag me zowiezo af waarom iemand z'n eigen login-gegevens zou verspreiden, maar dit is wat de klant wil, dit is wat met de klant is afgesproken, en waar ik nu geen invloed meer op uit kan oefenen.. het is niet anders :{

Verwijderd

Dan lijkt mij een combinatie van een uitlog-button in combinatie met een, aan elkaar gekoppelde, username en sessionid, de beste oplossing. Je kunt bij de user gegevens een kolom toevoegen waar je telkens bij het inloggen een nieuwe sessionid in plaatst. Wanneer een user klaar is kan hij uitloggen via de uitlog-button.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

bartm:
Dan lijkt mij een combinatie van een uitlog-button in combinatie met een, aan elkaar gekoppelde, username en sessionid, de beste oplossing. Je kunt bij de user gegevens een kolom toevoegen waar je telkens bij het inloggen een nieuwe sessionid in plaatst. Wanneer een user klaar is kan hij uitloggen via de uitlog-button.
... en als hij/zij niet uitlogt moet hij 30 minuten wachten. eigen schult dikke buld ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • smaij
  • Registratie: November 2000
  • Laatst online: 07-09 20:29
Op maandag 13 mei 2002 15:13 schreef bartm het volgende:
Dan lijkt mij een combinatie van een uitlog-button in combinatie met een, aan elkaar gekoppelde, username en sessionid, de beste oplossing. Je kunt bij de user gegevens een kolom toevoegen waar je telkens bij het inloggen een nieuwe sessionid in plaatst. Wanneer een user klaar is kan hij uitloggen via de uitlog-button.
Als hij dit dus 1 keer niet heeft gedaan? dan verdwijnt dus de sessie ID niet uit de database? en kan hij niet meer inloggen, of hoe moet ik dat dan zien?

________________

Als je het niet mogelijk wil maken dat er meerdere mensen inloggen, kan je het beste met timestamps werken en een session_id. elke keer dat er opnieuw ingelogd word, word er gekeken of de session_id bestaat, en zo ja, als die bestaat wat dan het laatste tijdstip is geweest van die actie.

het risico: stel iemand logged in, computer hangt, start opnieuw op, gaat weer naar die site, en kan dan 10 minuten niet meer inloggen, is ie de klos. en werkt het principe niet meer..

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Als je toch de boel op deze manier verder gaat zetten zou ik een timeout van een sessie stellen (bijv. 15 minuten).
Je logt dan de laatste activiteitstijd bij de sessie.
Bij het inloggen check je of er nog andere sessies zijn die in de laatste 15 minuten actief zijn geweest en niet uitgelogd zijn.
Als dat zo is weiger je de login.

Op deze manier heb je maar een klein nadeeltje nl. als je niet uitlogt en binnen 15 minuten op een andere pc wilt werken zul je de andere eerst uit moeten loggen.

Who is John Galt?


  • smaij
  • Registratie: November 2000
  • Laatst online: 07-09 20:29
Op maandag 13 mei 2002 15:19 schreef justmental het volgende:
Als je toch de boel op deze manier verder gaat zetten zou ik een timeout van een sessie stellen (bijv. 15 minuten).
Je logt dan de laatste activiteitstijd bij de sessie.
Bij het inloggen check je of er nog andere sessies zijn die in de laatste 15 minuten actief zijn geweest en niet uitgelogd zijn.
Als dat zo is weiger je de login.

Op deze manier heb je maar een klein nadeeltje nl. als je niet uitlogt en binnen 15 minuten op een andere pc wilt werken zul je de andere eerst uit moeten loggen.
dan moet ie daar nog wel kunnen uitloggen.. dan moet de browser dus nog wel open zijn.

een oplossing hiervoor is een cookie, die je dus wel weer kan toegang tot de site kan geven, in die 10 minuten dat je inactief bent geweest..

daarna kan je dan zelfstandig uitloggen. en hoef je niet 10 minuten te wachten bij die andere pc ofzo..

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 13 mei 2002 15:19 schreef smaij het volgende:
het risico: stel iemand logged in, computer hangt, start opnieuw op, gaat weer naar die site, en kan dan 10 minuten niet meer inloggen, is ie de klos. en werkt het principe niet meer..
Dat hoeft geen probleem te zijn, meestal krijgen pc's dan weer hetzelfde ip.
Dan kun je zorgen dat als er nog een sessie op hetzelfde ip is dat deze vervangen wordt.

Who is John Galt?


  • smaij
  • Registratie: November 2000
  • Laatst online: 07-09 20:29
Op maandag 13 mei 2002 15:22 schreef justmental het volgende:

[..]

Dat hoeft geen probleem te zijn, meestal krijgen pc's dan weer hetzelfde ip.
Dan kun je zorgen dat als er nog een sessie op hetzelfde ip is dat deze vervangen wordt.
een cookie zou een veiligere optie zijn denk ik..
ip addressen zijn niet 100 % te vertrouwen.
dan zou een pc op je werk in het netwerk dus toch kunnen inloggen onder jouw user gegevens, terwijl dit niet de bedoeling was

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op maandag 13 mei 2002 15:25 schreef smaij het volgende:
een cookie zou een veiligere optie zijn denk ik..
ip addressen zijn niet 100 % te vertrouwen.
dan zou een pc op je werk in het netwerk dus toch kunnen inloggen onder jouw user gegevens, terwijl dit niet de bedoeling was
Uiteraard gebruik je ook een cookie, maar die kun je toch gewoon laten bestaan?
Net zoals hier op GoT bijvoorbeeld.
Je cookie blijft bestaan als je niet uitlogt.

Who is John Galt?


  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Sorry dat ik deze weer even kick, maar ik vind het een interessant topic en heb nog een vraagie.

Als je nou wilt weten wie er op dit moment waar is ingelogd. Is dit mogelijk? Want zo te lezen kun je niet bepalen wanneer er uitgelogd wordt.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Klopt...

Jij als server zijnde weet niets van client (Browser cq User). De client moet alles vertellen aan de Server.

Programmer - an organism that turns coffee into software.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op mijn site beschouw ik eenieder die in de afgelopen 15 minuten actief geweest is als ingelogd.

Who is John Galt?


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017

RSD

dit is ook wel handig voor mij.. :) als er van login geswitched wordt, wordt er tevens een mail gestuurd naar de webmaster :) , komt uit het ideen boek van ACM :)
Pagina: 1