Hallo

Ik ben sipke jan sangers en loop stage bij een bedrijf in drachten. Ik moet een applicatie maken met php. Hierin kunnen gebruikers inloggen.

Het probleem is dat de gebruiker maar 1 keer ingelogd mag zijn. Met een session's is dit bijna niet op te lossen geloof ik en als je een boolean in een database bijhoudt, moet die veranderd worden na uitloggen.
Dit werkt wel, maar als de gebruiker de browser dichtdoet of de session heeft een timeout, kan de gebruiker al niet meer inloggen omdat de boolean gezet is.

Weten jullie hier een oplossing voor?, het hoeft niet beslist via een database te gaan, ik sta overal voor open.
Frank schreef op 24.11.2005 18:45
Session-id's zijn uniek, het heeft dus geen zin om deze in de database op te slaan. Verder zou ik niet weten hoe je met 100% zekerheid er voor kunt zorgen dat een gebruiker slechts 1x is aangelogd. De enige manier is om gebruikers te dwingen om netjes af te loggen. In dat geval kun je bij het aanloggen een vinkje zetten bij 'aangelogd' en deze weer verwijderen wanneer iemand uitlogd. Probleem is alleen dat 9 van de 10 gebruikers niet netjes afloggen... En wat ga je daar mee doen? Eens per dag een cronjob draaien om alle gebruikers alsnog af te loggen is een mogelijke workaround, maar het blijft behelpen.


Je kan zo'n session ID in de database opslaan, en ook neerzetten of iemand is ingelogd of niet. Stel dat iemand in wil loggen die al is ingelogd, dan ziet het systeem dat de gebruiker is ingelogd, en met welk sessie['id'] dat was. Je kan (mits deze sessie nog beschikbaar is) deze teruggeven aan de gebruiker en anders een andere aanmaken.
Robert Deiman

hallo, heb je al eens gekeken naar wat het session ID nou eingelijk is?, als je 2 browsers zou openen, heb je al 2 verschillende session id's. je kan wel neerzetten of iemand is ingelogd, je kunt niet neerzetten of hij niet is ingelogd.

Als je denkt dat je wel een oplossing hebt, zou je dit misschien kunnen uitwerken en de oplossing dan posten. Ik heb trouwens niet een voorkeur voor cookies, omdat die client-sided zijn.
Is er geen workaround mogelijk via de combinatie JavaScript - PHP? JavaScript kent een onUnload event en je kunt er ook een form mee submitten waarin je de uservariabelen opslaat om de user uit te kunnen loggen


<body onUnload="uitlog_form.submit ();">

Probleem is dan natuurlijk wel dat je dat op elke pagina moet doen, en elegant is anders.
sorry, post op verkeerde plek :S
Gewoon simpel houden
als je inlogt zet je in de database login op 1
als je dan nog en keer wilt inloggen kijk of dat ding op 1 staat

Daarna koppel je het aan een tijd
bijv. een halfuur
als dat half uur verstreken is dan login weer op 0
@Jan: het onunload event zou ik niet toepassen, want zodra men dan een andere pagina aanvraagt wordt het unload-event van de eerste aangeroepen en is men dus ... precies ;)

Je kunt overwegen om een custom-session-handler het hele sessie gebeuren zodanig af te stellen dat de 'garbage-collection-time' kort is (bv 2 minuten) en dat met een javascript via een XMLHTTPRequest iedere minuut een bestand wordt aangeroepen.
Dit bestand hoeft geen hmtl-code te bevatten, maar houd wel de sessie aktief omdat je browser bij zo'n request de sessie-id meestuurt.

Aan de hand van die sessie-id wordt de sessie dus weer 2 minuten verlengd.

Ander voordeel van de custom-session-handler is dat je ook andere informatie op kunt slaan zoals bv een gebruiker-id.

Is er al een sessie aktief met die gebruiker-id dan kun je het inloggen stoppen en de bezoeker hiervan in kennis stellen.
Klinkt interresant willem

ik zal hier wel even wat mee proberen (na het weekend natuurlijk), bedankt alvast
Ik ben even aan de slag geweest met custom_session-handlers en denk dat ik er nu wel uit kom, ik sla alle gegevens van alle session's op zodat ik kan zien wie in gelogd is. De garbage collection kan ik zelf instellen, wanneer een sessie langer dan ene bepaalde tijd niet gebruikt is en daarna wordt de site weer bezocht (script wordt uitgevoerd) verwijderd hij alle verouderde sessie's

Hier is de link waar ik de informatie vandaan heb gehaald


bedankt voor je tip willem ;)
Was ik weer

Ik ben er nog even mee bezig geweest. En met javascript kun je bijhouden of de browser gesloten is/wordt. Als dit gebeurt redirect ik naar een sessiondestroy.php waar de sessie gedestroyed wordt en daarna hetzelfde scherm.
Omdat ik bij de destroy de sessie uit de database wordt gehaald is het probleem opgelost :)

Nogmaals bedankt voor het wijzen in de juist richting ;)
hmm, ik ben niet goed mee,

ik heb net hetzelfde probleem,

ik wou mensen laten inloggen met database op 1 en session met status en username en cookie met id

op elke pagina kijkt hij of de sessie status de nodige rechten heeft, en of usename sessie bestaat (dus ingelogd)

indien niet ingelogd dan kijkt hij via de cookie in de database of die persoon ingelogd is. zoja dan sessions aanmaken.

Probleem: als die cookie op een andere pc ergens staat dan kan die gewoon ook de sessie variabelen aanmaken. en dus ingelogd zijn.

Reageren