Session Limit

Tags:    php

Hvordan kan man kontrollere om en user er logget ind mere end én gang? Hvis nu en user f.eks. logger ind i én browser og så vil logge ind i en anden lige bagefter, så vil jeg have den til at blokere nr 2 login, ind til det første link er afbrudt.



9 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
En primitiv men forholdsvis effektiv løsning kan være at du har et "is_logged_in" felt i databasen der er enten 1 eller 0 ud for brugeren. du sætter den til 1 første gang brugeren logger ind, og sætter den til 0 når brugeren logger ud/timer ud.

når brugeren så prøver at logge ind igen tjekker du, om brugerens is_logged_in i databasen = 1, og hvis den er, så siger du nej i døren.



Hvad med at tilknytte session id til brugernavnet... Ændrer session id for den bruger der er logget ind, så er brugeren ikke længere logget ind.

Dvs. at man gemmer session id i DB ud for brugernavnet, og senere sammenligner man så session_id og brugernavn med det der ligger i serverens session registrering.

Eksempel
Fold kodeboks ind/udKode 


Det skulle gerne løse problemstillingen.



Så vidt jeg ved kan man ikke tjekke for sessions på tværs af browsere..

Det du evt. kan gøre er, at give den session et unikt ID ved login, som samtidig bliver gemt i databasen, så hvis man logger ind i en anden browser får en session et nyt unikt ID, og man er derfor ikke længere valideret i den første browser mere ;)



Det er fordi jeg har set en todelt løsning med et software program. Der er en side hvor man kan logge ind (på nettet) som man normalt ser. Men hvis man samtidig er logget ind i softwaren kan man ikke logge ind på siden, altså man kan kun have én session. Og så vice versa, hvis man er logget ind på websiden kan man ikke logge på softwaren.



Så skal du evt. lave et felt i databasen du kalder klient eller browser.

Når man logger på i IE, gemmer du altså "IE" i databasen, FF ved firefox, Chrome etc.
Og når det så er softwaren kalder du den software el.lign.
Når du så skal validere brugeren på de enkelte sider, skal du bare tjekke hvor man ellers er logget ind ;)

Det der så vil ske er, at når man logger i browseren, bliver man logget ud af softwaren vice versa.

Er dog ikke 100% på, sådan lige på stående fod, hvordan du vil gøre så man slet ikke kan logge ind, når den anden er aktiv.

Selvfølgelig kan du slette klient data når man logger ud, men hvis man glemmer at logge ud i den ene, er man så tvunget til at logge på der igen, og logge ud før man kan logge på den anden igen ;)



Det skal dog lige pointeres at det med at give hver session et unikt ID det kan omgås :)

I Opera er der en indbygget editor til cookies, hvor du kan gå ind og ændre værdien af en session/cookie. Så hvis man vil være logget ind 2 steder samtidig går man blot ind og finder det unikke ID for 2. login og ændrer session/cookie i 1. login til det samme :)



Det skal dog lige pointeres at det med at give hver session et unikt ID det kan omgås :)

I Opera er der en indbygget editor til cookies, hvor du kan gå ind og ændre værdien af en session/cookie. Så hvis man vil være logget ind 2 steder samtidig går man blot ind og finder det unikke ID for 2. login og ændrer session/cookie i 1. login til det samme :)

Ja, men hvis man virkelig er så ivrig efter at være logget på to steder, er der sikkert flere måder hvorved det kan omgås ;)

Det kan jo også lade sig gøre at manipulere med f.eks. hvilken browser man sidder I, så det kan heller ikke bruges.

Det kommer selvfølgeligt an på hvem målgruppen er?



Hvad med at tilknytte session id til brugernavnet... Ændrer session id for den bruger der er logget ind, så er brugeren ikke længere logget ind.

Dvs. at man gemmer session id i DB ud for brugernavnet, og senere sammenligner man så session_id og brugernavn med det der ligger i serverens session registrering.

Eksempel
Fold kodeboks ind/udKode 


Det skulle gerne løse problemstillingen.


Det var vist også nogenlunde det jeg mente ;)



Og vist også nogenlunde det jeg pointerede kunne omgås ;)

Hvis det blot er for at almindelige brugere ikke logger ind to steder samtidig er det jo ganske udmærket. Men hvis det er strengt nødvendigt at det ikke kan lade sig gøre, så er sessions ikke løsningen :)



t