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.
Hallo Sipke Jan Sangers,
Met sessions is dit wel te doen, maar als je de browser dan afsluit, dan zal de gebruiker weer zijn uitgelogd. Je kunt dit voorkomen door cookies te gebruiken, maar dat is ook niet echt het veiligste wat er is. Daarom doe ik het met een database en sessions.
Als de gebruiker inlogt met de goede gegevens, dan voert het script een SQL-query uit. Die SQL-query zet in de database de status van 0 (offline) naar 1 (online). Als dat is gelukt maakt hij een session met de gebruikersnaam erin (gecodeerd met md5).
Op pagina's waar je voor moet inloggen controleert hij of de session aanwezig is, en zoekt hij in de database naar een gebruiker met dezelfde gebruikersnaam. Als die erin staat, controleert het script of de status 1 is. Als dat zo is, dan laat hij de pagina zien. Als dat niet zo is breekt hij het script af met die().
Misschien dat je hier wat aan hebt...
?
Onbekende gebruiker
24-11-2005 15:44
Ja zoiets heb ik ook al en dat wist ik,
maar wanneer zet je de status weer op o (offline)
want zoals je het nu vertelt zal hij maar 1x kunnen inloggen (als hij op een nonreguliere manier uitlogt)
bij het inloggen van test wordt de gebruiker z'n wachtwoord gecontroleerd, en als het goed gegaan is, wordt er een session variable op true gezet. Overal op de site wordt gecontroleerd of de variabele op true staat, anders wordt hij teruggeleid naar de inlogpagina (hij's niet mere ingelogd)
Het probleem is echter als volgt:
Test logt in: session op true (met session id xxxxx)
Test log weer in session op true (met andere session ID)
Ik wil niet dat test weer kan inloggen terwijl hij al is ingelogd.
Het toegang geven tot de site is verder geen probleem, het moet echter maar 1x gebeuren.
Als je dan een een kolom ingelogd maakt in je tabel, met daarin een sessie_id? (dat die kijkt of die bepaalde sessie bestaat, zo ja, dan is gebruiker nog ingelogd, zo nee, dan opnieuw inloggen)
?
Onbekende gebruiker
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.
?
Onbekende gebruiker
24-11-2005 20:14
Frank: jij begrijpt wat ik bedoel,
volgens mij is er ook geen goeie oplossing voor dit probleem, ik ben nu bijna een maand bezig met php en ben nog niets tegengekomen wat een mooie oplossing biedt. Ik had ook al een extra veld aangemaakt, maar het is gewoon ZO ongebruikersvriendelijk en je zou dan ook nog moeten cronjobben ja T.T
Ik zou gaan voor een 'tijd' veld per gebruikers en wat cookies (yummy)
Elke keer als de bezoeker een nieuwe pagina opent, kun je bij het controleren van zijn/haar gebruikersnaam en wachtwoord het datum veld 'last_action' (o.i.d.) aanpassen met de huidige datum en tijd.
Daarnaast geef je bij evaluatie van de gebruikersgegeven van elke bezoeker de status 'offline' voor mensen die langer dan x tijd geen handelingen hebben verricht op de site (het is het makkelijkste om hier dezelfde expire-time te gebruiken als je cookie).
Als de bezoeker zo 'stom' is dat deze niet netjes heeft uitgelogd, moet deze wachten tot de expire-tijd is afgelopen. Maar 2x inloggen is uitgesloten.
?
Onbekende gebruiker
25-11-2005 09:00
Pholeron, jouw oplossing heeft niets te maken met meerder keren ingelogd zijn :O