Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Logowanie tylko na jednym urządzeniu w tym samym czasie
Forum PHP.pl > Forum > PHP
iki
Dzień dobry
Borykam się z problemem, mianowicie: chciałbym uniemożliwić logowania się kilku osobom na jednym koncie w tym samym czasie. Szukałem informacji na ten temat jak to zrobić w Internecie, ale nigdzie ma takich informacji lub używam złych słów kluczowych. Wiem, że to jest możliwe, bo grałem kiedyś w grę biggrin.gif i w momencie gdy zalogowałem się na aplikacji, wylogowywano mnie z przeglądarki automatycznie. Taki efekt chciałbym osiągnąć, albo przynajmniej podobny.

Próbowałem to zrobić tak. W momencie logowania do bazy danych wysyłana jest informacja, że użytkownik jest zalogowany. Jeżeli ktoś inny próbuje się zalogować na konto, na które ktoś już jest zalogowany, wyskakiwałaby informacja że konto już jest używane przez inną osobę. W momencie wylogowywania się jest wysyłana informacja, że użytkownik już nie jest zalogowany i można zalogować się gdzieś indziej. Tylko problem jest taki, że po pierwsze kod mi nie działał i można było się zalogować, a po drugi sesja czasami sama się niszczy i wylogowuje użytkownika. Wtedy w bazie danych zostawałaby informacja, że jest zalogowany i w ogóle nie dałoby rady się zalogować.

Macie jakieś gotowe rozwiązania na ten problem? Jest mi to niezbędne do opublikowania strony www. smile.gif
ohm
Najprostsze rozwiązanie
Tworzysz hash podczas poprawnego zalogowania, np. wg "login + ip + dane przeglądarki + ewentualnie jakies dane identyfikujące użytkonika", zapisujesz hash w bazie i ten hash przypisujesz do cookie użytkownika. Następnie przy każdej akcji sprawdzasz czy hash się zgadza z konkretnymi danymi (czyli po prostu walidacja hasha, jeśli chciałby ktoś używać danego cookie), jeśli się nie zgadza, niszczysz sesję i wywalasz użytkownika do logowania.
iki
Hmm no rozumiem, rzeczywiście. Tylko, jestem niestety dość zielony w programowaniu php. Czy zadziałałoby, jeżeli zrobiłbym tak (zresztą zaraz zacznę to robić):
Podczas logowania pobieram ip użytkownika (tyle właściwie chyba by wystarczyło, bez przeglądarki) i tworzę ciąg znaków: $loginIP i wstawiam to do bazy danych. Na każdej podstronie sprawdzam, czy $loginIP jest takie samo jak w bazie tak? No rzeczywiście, zaraz to ogarnę.

EDIT
Super działa! Miałeś rację, wielkie dzięki. Jeśli uznacie, że ten temat jest błachostką się nikomu nie przyda możecie usunąć tongue.gif.
Przy logowaniu wsadzam IP do bazy. Na kazdej podstronie zapytanie czy IP jest inne niz to w bazie. Jesli tak - index.php. Dzięki smile.gif
Pyton_000
To faktycznie będzie działać, ale musisz wziąć pod uwagę zmienne IP smile.gif
Dodatkowo weź pod uwagę jeśli się ktoś nie wyloguje, wtedy nie będzie wjazdu. Musisz zapisywać sobie czas ostatniej aktywności, ustawić jakiś czas życia sesji np 10min, i jeśli ostatnia aktywność była > 10 min temu to automatem wylogować tamtego usera (usunąć jego sesję z serwera) i pozwolić zalogować nowego.

Jest dużo warunków które trzeba sprawdzać, a to tylko kilka z nich smile.gif
viking
Tylko jest to męczące w dobie wielu urządzeń - na przykładzie tego forum. Można zrozumieć w kluczowych aplikacjach typu bankowe ale nie dla zwykłych.
iki
Jeśli ktoś się nie wyloguje to nie ma problemu, żeby się zalogować bo to podczas logowania wrzucam do bazy danych IP nie zważając na poprzednie. No dobrze, ze zmiennym IP rzeczywiście problem... jak go rozwiązać.
viking, muszę zastosować to rozwiązanie, ponieważ moja strona będzie oferowała usługi dla osób na danym koncie. Jeżeli bym tego nie zastosował, z jednego konta mogłoby korzystać 100 osób smile.gif
Tomplus
Niektóre serwisy stosują zapisywanie adresów MAC komputerów aby weryfikować użytkowników.

A blokowanie wielu użytkowników w ten sposób nie ma wiele znaczenia, bo mogą zalogować się po czasie trwania sesji.
Także tutaj mogą być inne problemy, bo co gdy użytkownik np. z PC przeniesie się na swój telefon/tablet aby zakończyć działania/obserwacje na swoim koncie. A tutaj nagle dostanie komunikat że nie może się zalogować na własne konto z którego przed chwilą korzystał. Mówię tak tylko hipotetycznie.
Pyton_000
Pobranie MAC niestety nie jest takie proste, tutaj potrzebna już jest aplikacja po stronie klienta.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.