Emil T.

Emil T. Student, Uniwersytet
Marii
Curie-Skłodowskiej w
Lublinie

Temat: Logowanie na kilku komputerach

Witam,

Zastanawiam się na ile jest to możliwe, aby w systemie PHP umożliwić jednoczesne logowanie na kilku komputerach na jedno konto. Załóżmy, że nie chcę, aby w danym czasie na jednym koncie zalogowało się więcej niż 3 użytkowników.
Czy ktoś spotkał się już z takim problemem i znalazł estetyczne rozwiażanie.

Mam pewne pomysły, jak można byłoby to rozwiązać, ale niestety jak na razie każdy jest obarczony ryzykiem w pewnych przypadkach.

Będę wdzięczny za podpowiedzi.

Pozdrawiam
Jacek R.

Jacek R. programista

Temat: Logowanie na kilku komputerach

Nie do końca wiem w czym problem, bo ludzie zwykle pytają o sytuację odwrotną - jak zabezpieczyć system, by nie pozwalał na logowanie się z wielu miejsc na raz. Więc przede wszystkim nie możesz mieć tego zabezpieczenia.

A rozwiązanie samo w sobie jest chyba proste - zapisuj każdą sesję (jakiś identyfikator) w bazie, następnie przy sprawdzaniu stanu zalogowania:
- sprawdzaj, czy aktualna sesja znajduje się w bazie, jeśli nie, wylogowuj, jeśli tak:
- licz, ile sesji aktualnie jest aktywnych, w przypadku kiedy więcej niż określona liczba wywalaj sesję z najniższym id (lub wymyśl inny warunek)
- możesz dodatkowo AJAXem (albo nawet reverse AJAXem) sprawdzać na bieżącej stronie stan zalogowania/czekać na info, że wylogowano i na żywo użytkownika wylogowywać i przekierowywać na inną stronę.

Jakie jest to ryzyko w Twoich przypadkach, o którym piszesz?
Emil T.

Emil T. Student, Uniwersytet
Marii
Curie-Skłodowskiej w
Lublinie

Temat: Logowanie na kilku komputerach

Takie rozwiązanie nasówa mi się jako jedno z pierwszych.

Sprawdzanie odbywałoby się tylko przy logowaniu i nie ma nic w tym trudnego.

Ale trzeba rozważyć usówanie takich wpsów z bazy. Trzeba to robić przy wylogowaniu gracza.
To też nie problem.

Ale z doświadczenia wiem, że z użytkownikami nie jest tak łatwo i przerabiają wszystkie najgorsze scenariusze. Co jeśli użytkownik nie wyloguje się poprawnie np. zamknie okno przeglądarki?

Wtedy w bazie nadal będie widniał jako zalogowany.
W systemie mogą też zdarzać się awarie itp. które pozostawią wpisy w bazie.

W tym przypadku mógłbym dodać np. zadanie cron, które czyściłoby co pewien czas nieaktywne sesje ( no i tutaj przydałoby się odświeżanie sesji np. w ajax), bo użytkownik może pozostawać na jednej stronie przez dłuższy czas. Zadanie mogłoby wtedy wykasować przez przypadek wpis dla tego komputera i pozwolić na zalogowanie 4 osoby.
Jacek R.

Jacek R. programista

Temat: Logowanie na kilku komputerach

Emil T.:
Ale trzeba rozważyć usówanie takich wpsów z bazy. Trzeba to robić przy wylogowaniu gracza.
To też nie problem.
>
Ale z doświadczenia wiem, że z użytkownikami nie jest tak łatwo i przerabiają wszystkie najgorsze scenariusze. Co jeśli użytkownik nie wyloguje się poprawnie np. zamknie okno przeglądarki?

Wtedy w bazie nadal będie widniał jako zalogowany.
W systemie mogą też zdarzać się awarie itp. które pozostawią wpisy w bazie.
Pisałem, żeby wylogowanie również robić na zasadzie usunięcia wpisu w bazie przez kolejne zalogowanie. Można też zapisywać w bazie ostatnią aktywność usera i usuwać nieaktywne przez X czasu sesje. Można pingować serwer jakimś AJAXem, by dawać oznaki życia. Rozwiązań jest dużo.
W tym przypadku mógłbym dodać np. zadanie cron, które czyściłoby co pewien czas nieaktywne sesje ( no i tutaj przydałoby się odświeżanie sesji np. w ajax), bo użytkownik może pozostawać na jednej stronie przez dłuższy czas.
Czyściłbyś tylko te osierocone sesje, z którymi nie ma już połączonego żadnego klienta (sprawdzanie np przez pingowanie).

konto usunięte

Temat: Logowanie na kilku komputerach

Nie wiem.. nie rozumiem czegos...
Kazdy nowy uzytkownik to sesja w PHP. A to na jakie konto sie zaloguje nie ma praktycznie znaczenia - sesje sa osobne dla uzytkownikow... I mozliwosc zalogowania 300 uzytkownikow na jedno konto w twoim systemie istnieje caly czas. Trzeba sie wysilic w momencie kiedy chcesz ograniczyc logowanie do jednej osoby na konto w tym samym czasie.

... albo ja jakis lewy jestem w ten srodowy porannek i totalnie nie zrozumialem oco chodzi ;)
Emil T.

Emil T. Student, Uniwersytet
Marii
Curie-Skłodowskiej w
Lublinie

Temat: Logowanie na kilku komputerach

Jacek R.:
Emil T.:
Ale trzeba rozważyć usówanie takich wpsów z bazy. Trzeba to robić przy wylogowaniu gracza.
To też nie problem.
>
Ale z doświadczenia wiem, że z użytkownikami nie jest tak łatwo i przerabiają wszystkie najgorsze scenariusze. Co jeśli użytkownik nie wyloguje się poprawnie np. zamknie okno przeglądarki?

Wtedy w bazie nadal będie widniał jako zalogowany.
W systemie mogą też zdarzać się awarie itp. które pozostawią wpisy w bazie.
Pisałem, żeby wylogowanie również robić na zasadzie usunięcia wpisu w bazie przez kolejne zalogowanie. Można też zapisywać w bazie ostatnią aktywność usera i usuwać nieaktywne przez X czasu sesje. Można pingować serwer jakimś AJAXem, by dawać oznaki życia. Rozwiązań jest dużo.
W tym przypadku mógłbym dodać np. zadanie cron, które czyściłoby co pewien czas nieaktywne sesje ( no i tutaj przydałoby się odświeżanie sesji np. w ajax), bo użytkownik może pozostawać na jednej stronie przez dłuższy czas.
Czyściłbyś tylko te osierocone sesje, z którymi nie ma już połączonego żadnego klienta (sprawdzanie np przez pingowanie).

Tak, rozwiazań jest dużo. Zapisywanie danych do bazy i ich kasowanie nie stanowi problemu. Pingowanie super, pod warunkiem, że użytkownik ma włączoną obsługę JS (może nie mieć jej włączonej). Jeśli nie, to nici z pingowania i wtedy czas czyszczenia sesji nie może być krótszy od ważności sesji na serwerze.

Staram się tylko znaleźć rozwiązanie, które nie będzie powodowało obsówy czasowej.

Załóżmy, że użytkownik nie wylogował się z serwisu, tylko zamknął przegladarkę. Wtedy system będzie widział, że dla danego konta jest 3 aktywnych użytkowników, podczas gdy jest ich 2.
Będzie tak do czasu, gdy osierocona sesja zostanie wykasowana.
Problem w tym, że w tym samym czasie może chcieć się zalogować kolejna osoba na to samo konto. No i tutaj niestety system wyświetli komunikat, że nie można się zalogować (oczywiście mogę poinformować, że może spróbować za jakiś czas, bo być może ten użytkownik jest już niezalogowany).

Użytkownicy jednak często piszą w takich przypadkach, żeby oddać im kasę, bo nie mogą korzystać z tego, za co zapłacili.

Dlatego chciałbym uniknąć gdybania i wyświetlić użytkownikowi komunikat, że nie może się zalogować faktycznie wtedy, gdy limit jest wyczerpany. Dodam, że użytkownicy mogą się komunikować, bo są częścią tej samej organizacji.

Andrzej, sesje to niezależne byty, ale w bazie danych mam listę użytkowników i mogę na tych kontach operować i zapisywać dla nich dodatkowe informacje np. czy zalogował się do systemu.

konto usunięte

Temat: Logowanie na kilku komputerach

Emil T.:
Jacek R.:
Emil T.:
Ale trzeba rozważyć usówanie takich wpsów z bazy. Trzeba to robić przy wylogowaniu gracza.
To też nie problem.
>
Ale z doświadczenia wiem, że z użytkownikami nie jest tak łatwo i przerabiają wszystkie najgorsze scenariusze. Co jeśli użytkownik nie wyloguje się poprawnie np. zamknie okno przeglądarki?

Wtedy w bazie nadal będie widniał jako zalogowany.
W systemie mogą też zdarzać się awarie itp. które pozostawią wpisy w bazie.
Pisałem, żeby wylogowanie również robić na zasadzie usunięcia wpisu w bazie przez kolejne zalogowanie. Można też zapisywać w bazie ostatnią aktywność usera i usuwać nieaktywne przez X czasu sesje. Można pingować serwer jakimś AJAXem, by dawać oznaki życia. Rozwiązań jest dużo.
W tym przypadku mógłbym dodać np. zadanie cron, które czyściłoby co pewien czas nieaktywne sesje ( no i tutaj przydałoby się odświeżanie sesji np. w ajax), bo użytkownik może pozostawać na jednej stronie przez dłuższy czas.
Czyściłbyś tylko te osierocone sesje, z którymi nie ma już połączonego żadnego klienta (sprawdzanie np przez pingowanie).

Tak, rozwiazań jest dużo. Zapisywanie danych do bazy i ich kasowanie nie stanowi problemu. Pingowanie super, pod warunkiem, że użytkownik ma włączoną obsługę JS (może nie mieć jej włączonej). Jeśli nie, to nici z pingowania i wtedy czas czyszczenia sesji nie może być krótszy od ważności sesji na serwerze.

Proste. Wymagasz JS i basta. Dzisiaj JS to norma. Większość serwisów jest bardzo zubożona lub wręcz nie do użytkowania bez JS. No ale jeżeli chcesz iść w zaparte i zaspokoić nawet wąską grupę ludzi która zamiast po prostu zezwalać lub nie danej stronie korzystać JS blokuje go kompletnie to Twoja sprawa. W tym wypadku założył bym XX minut po których sesja wygaśnie i tyle.

Staram się tylko znaleźć rozwiązanie, które nie będzie powodowało obsówy czasowej.

Załóżmy, że użytkownik nie wylogował się z serwisu, tylko zamknął przegladarkę. Wtedy system będzie widział, że dla danego konta jest 3 aktywnych użytkowników, podczas gdy jest ich 2.

Idziesz złym tokiem myślenia. Tu nie jest kwestia tego czy użytkownik jest zalogowany czy nie. Obecność rekordu w bazie danych w żadnym wypadku nie powinna decydować czy użytkownik jest lub nie zalogowany.
Będzie tak do czasu, gdy osierocona sesja zostanie wykasowana.
Problem w tym, że w tym samym czasie może chcieć się zalogować kolejna osoba na to samo konto. No i tutaj niestety system wyświetli komunikat, że nie można się zalogować (oczywiście mogę poinformować, że może spróbować za jakiś czas, bo być może ten użytkownik jest już niezalogowany).

Od dupnej strony podchodzisz do problemu. Załóżmy że masz limit 3 osób na konto. Loguję się Ja, Ty i Jacek. Dołącza do nas Michał jako czwarty. Ja wykonałem akcję w systemie jako ostatni więc w momencie jak Michał się zalogował - ja zostaje wypchany z systemu.
W ten sposób nadal tylko 3 osoby są zalogowane i wykonują akcje a przy okazji nikt nikogo nie blokuje.

Dodatkowo mechanizm ten bardzo wkurza więc użytkownicy sami muszą zadbać o to by osoby czwartej nie było albo wprowadzi ona problemy dla pozostałych. Jak wszyscy 4 będą próbowali się zalogować to będą się wzajemnie wypychać z systemu.

Użytkownicy jednak często piszą w takich przypadkach, żeby oddać im kasę, bo nie mogą korzystać z tego, za co zapłacili.

Norma. Płacę - wymagam. Skoro za coś zapłaciłem to chcę to dostać.


Dlatego chciałbym uniknąć gdybania i wyświetlić użytkownikowi komunikat, że nie może się zalogować faktycznie wtedy, gdy limit jest wyczerpany. Dodam, że użytkownicy mogą się komunikować, bo są częścią tej samej organizacji.

Więc podchodzisz do całego problemu od dupnej strony. Może jednak uchylisz rąbka tajemnicy i powiesz co robisz ? Grę ? Intranet firmowy ? Uwierz mi, większość z nas widziała podobne systemy lub je robiła więc niczym nas raczej nie zaskoczysz.

Jeżeli to gra to po prostu przystosuj ją do pracy wielu użytkowników na jednym koncie w razie gdyby gracz zalogował się również z telefonu czy tabletu.
Niezależnie od projektu, konto powinno być tylko na JEDNEGO użytkownika i o żadnej współpracy kilku osób na jednym koncie nie powinno być mowy.

Zamiast przypisywać użytkowników do konta i kazać im pracować na jednym - przypisz ich do zasobów tak by kilka kont mogło pracować nad jednym zasobem (nieważne czy to plansza gry, dokument czy coś innego).

Kilku użytkowników per konto ma jedną dużą wadę. Rozmyta odpowiedzialność. Nie dojdziesz który zrobił coś złego bo logi tego nie wykażą. Samo IP nie jest dowodem.


Andrzej, sesje to niezależne byty, ale w bazie danych mam listę użytkowników i mogę na tych kontach operować i zapisywać dla nich dodatkowe informacje np. czy zalogował się do systemu.

W pierwszym poście pytasz o logowanie wielu użytkowników do systemu co w PHP jest normą. Dlatego Andrzej o to pytał. Sam się zastanawiałem na początku o co Ci chodzi skoro pytasz o coś co jest możliwe.

konto usunięte

Temat: Logowanie na kilku komputerach

Emil T.:
Jacek R.:
Emil T.:
Ale trzeba rozważyć usówanie takich wpsów z bazy. Trzeba to robić przy wylogowaniu gracza.
To też nie problem.
>
Ale z doświadczenia wiem, że z użytkownikami nie jest tak łatwo i przerabiają wszystkie najgorsze scenariusze. Co jeśli użytkownik nie wyloguje się poprawnie np. zamknie okno przeglądarki?

Wtedy w bazie nadal będie widniał jako zalogowany.
W systemie mogą też zdarzać się awarie itp. które pozostawią wpisy w bazie.
Pisałem, żeby wylogowanie również robić na zasadzie usunięcia wpisu w bazie przez kolejne zalogowanie. Można też zapisywać w bazie ostatnią aktywność usera i usuwać nieaktywne przez X czasu sesje. Można pingować serwer jakimś AJAXem, by dawać oznaki życia. Rozwiązań jest dużo.
W tym przypadku mógłbym dodać np. zadanie cron, które czyściłoby co pewien czas nieaktywne sesje ( no i tutaj przydałoby się odświeżanie sesji np. w ajax), bo użytkownik może pozostawać na jednej stronie przez dłuższy czas.
Czyściłbyś tylko te osierocone sesje, z którymi nie ma już połączonego żadnego klienta (sprawdzanie np przez pingowanie).

Tak, rozwiazań jest dużo. Zapisywanie danych do bazy i ich kasowanie nie stanowi problemu. Pingowanie super, pod warunkiem, że użytkownik ma włączoną obsługę JS (może nie mieć jej włączonej). Jeśli nie, to nici z pingowania i wtedy czas czyszczenia sesji nie może być krótszy od ważności sesji na serwerze.

Proste. Wymagasz JS i basta. Dzisiaj JS to norma. Większość serwisów jest bardzo zubożona lub wręcz nie do użytkowania bez JS. No ale jeżeli chcesz iść w zaparte i zaspokoić nawet wąską grupę ludzi która zamiast po prostu zezwalać lub nie danej stronie korzystać JS blokuje go kompletnie to Twoja sprawa. W tym wypadku założył bym XX minut po których sesja wygaśnie i tyle.

Staram się tylko znaleźć rozwiązanie, które nie będzie powodowało obsówy czasowej.

Załóżmy, że użytkownik nie wylogował się z serwisu, tylko zamknął przegladarkę. Wtedy system będzie widział, że dla danego konta jest 3 aktywnych użytkowników, podczas gdy jest ich 2.

Idziesz złym tokiem myślenia. Tu nie jest kwestia tego czy użytkownik jest zalogowany czy nie. Obecność rekordu w bazie danych w żadnym wypadku nie powinna decydować czy użytkownik jest lub nie zalogowany.
Będzie tak do czasu, gdy osierocona sesja zostanie wykasowana.
Problem w tym, że w tym samym czasie może chcieć się zalogować kolejna osoba na to samo konto. No i tutaj niestety system wyświetli komunikat, że nie można się zalogować (oczywiście mogę poinformować, że może spróbować za jakiś czas, bo być może ten użytkownik jest już niezalogowany).

Od dupnej strony podchodzisz do problemu. Załóżmy że masz limit 3 osób na konto. Loguję się Ja, Ty i Jacek. Dołącza do nas Michał jako czwarty. Ja wykonałem akcję w systemie jako ostatni więc w momencie jak Michał się zalogował - ja zostaje wypchany z systemu.
W ten sposób nadal tylko 3 osoby są zalogowane i wykonują akcje a przy okazji nikt nikogo nie blokuje.

Dodatkowo mechanizm ten bardzo wkurza więc użytkownicy sami muszą zadbać o to by osoby czwartej nie było albo wprowadzi ona problemy dla pozostałych. Jak wszyscy 4 będą próbowali się zalogować to będą się wzajemnie wypychać z systemu.

Użytkownicy jednak często piszą w takich przypadkach, żeby oddać im kasę, bo nie mogą korzystać z tego, za co zapłacili.

Norma. Płacę - wymagam. Skoro za coś zapłaciłem to chcę to dostać.


Dlatego chciałbym uniknąć gdybania i wyświetlić użytkownikowi komunikat, że nie może się zalogować faktycznie wtedy, gdy limit jest wyczerpany. Dodam, że użytkownicy mogą się komunikować, bo są częścią tej samej organizacji.

Więc podchodzisz do całego problemu od dupnej strony. Może jednak uchylisz rąbka tajemnicy i powiesz co robisz ? Grę ? Intranet firmowy ? Uwierz mi, większość z nas widziała podobne systemy lub je robiła więc niczym nas raczej nie zaskoczysz.

Jeżeli to gra to po prostu przystosuj ją do pracy wielu użytkowników na jednym koncie w razie gdyby gracz zalogował się również z telefonu czy tabletu.
Niezależnie od projektu, konto powinno być tylko na JEDNEGO użytkownika i o żadnej współpracy kilku osób na jednym koncie nie powinno być mowy.

Zamiast przypisywać użytkowników do konta i kazać im pracować na jednym - przypisz ich do zasobów tak by kilka kont mogło pracować nad jednym zasobem (nieważne czy to plansza gry, dokument czy coś innego).

Kilku użytkowników per konto ma jedną dużą wadę. Rozmyta odpowiedzialność. Nie dojdziesz który zrobił coś złego bo logi tego nie wykażą. Samo IP nie jest dowodem.


Andrzej, sesje to niezależne byty, ale w bazie danych mam listę użytkowników i mogę na tych kontach operować i zapisywać dla nich dodatkowe informacje np. czy zalogował się do systemu.

W pierwszym poście pytasz o logowanie wielu użytkowników do systemu co w PHP jest normą. Dlatego Andrzej o to pytał. Sam się zastanawiałem na początku o co Ci chodzi skoro pytasz o coś co jest możliwe.
Emil T.

Emil T. Student, Uniwersytet
Marii
Curie-Skłodowskiej w
Lublinie

Temat: Logowanie na kilku komputerach

Od razu widać, że nie pracowałeś nigdy w dużej korporacji.

Jest już system, który jakoś działa i trzeba dopisać do niego funkcjonalność.
Dostajesz bazę, specyfikację i nie ma mowy żeby przerabiać coś według widzimi się. Nad totą jest tona ludzi zatwierdzających dokumentacje. Nie przepisujesz od nowa zasady działania serwisu i tworzenia kont. To już jest tak napisane i tak zostaje.

Masz problem i musisz go rozwiązać, a nie obchodzić.

Nie przepisujesz od nowa systemu z powodu tego, że brakuje Ci w nim jakiejś funkcjonalności, tylko starasz się uzupełnić braki.

Nie mam mowy aby wymuszać na użytkownikach obsługę JS, bo to zawężanie rynku i odstraszanie potencjalnych użytkowników.

Użytkownicy z JS dostają po prostu trochę więcej.

Życzę też powodzenia z wypychaniem z systemu użytkownika już zalogowanego po to tylko, aby inny mógł się zalogować.
Na jakiej podstawie decydujesz, kto jest ważniejszy? A może decyduje kolejność logowania?

System robiony jest dla użytkownika, a nie odwrotnie. To użytkwonik wymaga, a nie my od niego i im bardziej system jest jemu przyjazny, tym więcej użytkowników zyskujesz.

Rodzaj systemu nie ma tutaj nic do znaczenia. Staram się zorientować w możliwych rozwiazaniach.

W pierwszym poście dodałem też wzmiankę o ograniczeniu do 3 użytkowników na jedno konto. Być może faktycznie nie jest to dość jacne.
Jacek R.

Jacek R. programista

Temat: Logowanie na kilku komputerach

Emil T.:
Będzie tak do czasu, gdy osierocona sesja zostanie wykasowana.
Problem w tym, że w tym samym czasie może chcieć się zalogować kolejna osoba na to samo konto. No i tutaj niestety system wyświetli komunikat, że nie można się zalogować (oczywiście mogę poinformować, że może spróbować za jakiś czas, bo być może ten użytkownik jest już niezalogowany).
Kolejna, czyli inna osoba, logująca się na to samo konto? To jest błąd na poziomie koncepcji systemu. A poza tym, co pisałem dwa razy i piszę teraz trzeci: przy limicie 3 klientów, czwarty klient wylogowuje pierwszego. Problem z głowy. Teoretycznie to powinien być ten sam użytkownik, więc to już jego problem, jak korzysta na raz z 4 urządzeń.
Emil T.:
Nie mam mowy aby wymuszać na użytkownikach obsługę JS, bo to zawężanie rynku i odstraszanie potencjalnych użytkowników.
Zawężasz o jakiś 1%, albo mniej.
Życzę też powodzenia z wypychaniem z systemu użytkownika już zalogowanego po to tylko, aby inny mógł się zalogować.
Na jakiej podstawie decydujesz, kto jest ważniejszy? A może decyduje kolejność logowania?
Masz dwie opcje - wypychać, albo wyświetlać info że nie można się zalogować. Na jakiej podstawie chcesz zabraniać zalogowania się i wyświetlać komunikat? Zaprzeczasz sam sobie - tak czy siak MUSISZ zdecydować, kto się loguje, a kto nie. Tutaj po prostu wychodzi błąd w systemie na poziomie założeń - jedno konto, wielu użytkowników. Gdyby to było jedno konto i jeden użytkownik logujący się z kilku urządzeń, sprawa byłaby prostsza. A tak musisz sobie radzić z błędnym kołem. Nie ma dobrego rozwiązania, dopóki nie przeprojektujesz systemu.Jacek R. edytował(a) ten post dnia 30.05.12 o godzinie 12:30
Emil T.

Emil T. Student, Uniwersytet
Marii
Curie-Skłodowskiej w
Lublinie

Temat: Logowanie na kilku komputerach

Jacek R.:
Emil T.:
> Będzie tak do czasu, gdy osierocona sesja zostanie wykasowana.
Problem w tym, że w tym samym czasie może chcieć się zalogować kolejna osoba na to samo konto. No i tutaj niestety system wyświetli komunikat, że nie można się zalogować (oczywiście mogę poinformować, że może spróbować za jakiś czas, bo być może ten użytkownik jest już niezalogowany).
Kolejna, czyli inna osoba, logująca się na to samo konto?

To nie koncepcja, tylko Polska rzeczywistość, gdzie użytkownik kupuje abonament, a potem 100 innych osób korzysta z tego konta.

Te ograniczenia to nie mój pomysł i chętnie bym to pozmieniał, ale niestety klient nasz Pan i mam system z którym coś trzeba zrobić.

Klient chce zminimalizować straty i wprowadzić ograniczenie, aby w danym czasie maksymalnie kilka osób, przykładowo 3 logowało się do tego samego systemu.

>To
jest błąd na poziomie koncepcji systemu. A poza tym, co pisałem dwa razy i piszę teraz trzeci: przy limicie 3 klientów, czwarty klient wylogowuje pierwszego. Problem z głowy. Teoretycznie to powinien być ten sam użytkownik, więc to już jego problem, jak korzysta na raz z 4 urządzeń.


Teoretycznie, ale czy na pewno? Otórz nie. Pewne jest, że na jedno knto wykupione w systemie loguje się wielu użytkowników (udostępnianie konta znajomym). Nie mogę zakładać, że pierwsza i ostatnia osoba to ta sama.
Dla bezpieczeństwa muszę założyć, że każde logowanie to oddzielna osoba.

Takie ograniczenie może okazać się bezsensowne, ale przy tej specyfice serwisu, często wiele osób korzystających z jednego konta w systemie, musi logować się do systemu w tym samym czasie i korzystać z niego przez dłuższy okres liczony w godzinach.Emil T. edytował(a) ten post dnia 30.05.12 o godzinie 12:40
Jacek R.

Jacek R. programista

Temat: Logowanie na kilku komputerach

Dlatego zdecyduj, czy:

1. Chcesz mieć względnie łatwą i prostą implementację bez żadnego JS po stronie klienta, bez crona i bez kłopotów - czyli na N userów user N+1 wylogowujesz usera 1, i tak w kółko.
2. Chcesz mieć skomplikowaną implementację wymagającą monitorowania sesji i czyszczenia sierot w bazie cronem - czyli nie wylogowujesz nikogo, tylko kolejnemu userowi wyświetlasz komunikat, że musi poczekać.

A skoro jesteś w korporacji, to przedstaw te dwie opcje z wyceną czasową swojemu biznesowi i niech oni zdecydują... ;)
Emil T.

Emil T. Student, Uniwersytet
Marii
Curie-Skłodowskiej w
Lublinie

Temat: Logowanie na kilku komputerach

To akurat sprawa prywatna.

Dzięki Panowie za wypowiedzi.
Na pewno z każdej wyciągnę jakieś wnioski.

Pozdr

konto usunięte

Temat: Logowanie na kilku komputerach

Emil T.:
Od razu widać, że nie pracowałeś nigdy w dużej korporacji.

Wybacz ale takie teksty są dziecinne. Jak byś podał więcej szczegółów to byś dostał konkretniejsze informacje. Nie jesteśmy jasnowidzami.

Jest już system, który jakoś działa i trzeba dopisać do niego funkcjonalność.
Dostajesz bazę, specyfikację i nie ma mowy żeby przerabiać coś według widzimi się. Nad totą jest tona ludzi zatwierdzających dokumentacje. Nie przepisujesz od nowa zasady działania serwisu i tworzenia kont. To już jest tak napisane i tak zostaje.

System jest obsługiwany nieprawidłowo w skrócie... Macie menedżera po zawodówce który tydzień wcześniej świnie przeganiał że porwaliście się na aplikacje która nie jest adekwatna do Waszych potrzeb ? To że system działa i jesteście skazani na patologie tego typu mogłeś pisać również od początku.

Bo w takim razie Twoje poprzednie posty wyglądały mniej i więcej tak:
~ boli
~ gdzie ?
~ nie powiem!

I ni huhu nie wiadomo czy ukłułeś się w palec czy masz zawał serca.

Masz problem i musisz go rozwiązać, a nie obchodzić.

O tym pisałem. Z tego co piszesz Wy nie rozwiązujecie problemu tylko go obchodzicie dokładając do systemu jakieś protezy.

Nie przepisujesz od nowa systemu z powodu tego, że brakuje Ci w nim jakiejś funkcjonalności, tylko starasz się uzupełnić braki.

Jeżeli brakuje funkcjonalności to się je DOPISUJE a nie przepisuje system. W pierwszej kolejności system powinien być robiony/zamawiany pod potrzeby. Jakoś nie pracuję w korporacji a wiem...

Nie mam mowy aby wymuszać na użytkownikach obsługę JS, bo to zawężanie rynku i odstraszanie potencjalnych użytkowników.

Jak wspomniał Jacek - mniej jak 1%. Poza tym nieświadomie JS nie wyłączysz. Robisz to ŚWIADOMIE więc i z włączeniem nie powinno być problemu. Są 2 rodzaje użytkowników. Ci co wyłączyli JS i mają znacząco utrudnione życie w internecie i ci którzy JS dopuszczają na wybranych witrynach a oni problemem nie są.

Użytkownicy z JS dostają po prostu trochę więcej.

Co kiedyś mogło być dobrym podejściem kiedy internet był pełen "kwiatków JS" a głupota jak wywalanie alertów w pętli mogła wywalić przeglądarkę albo gorzej. Dzisiaj alerty idzie zablokować a rozwiązanie zasobożernego problemu z JS to tylko ubicie karty i nie otwieranie jej. Dodatkowo możliwe jest blokowanie JS na wybranych witrynach.

Życzę też powodzenia z wypychaniem z systemu użytkownika już zalogowanego po to tylko, aby inny mógł się zalogować.
Na jakiej podstawie decydujesz, kto jest ważniejszy? A może decyduje kolejność logowania?

Pomyśl przez chwilkę może. Zakładasz że ma logować się 100-200 ? To nie wprowadzasz ograniczenia bo nie ma sensu. Zakładasz że logować ma się 3 ? To 4 wprowadza zamęt i tych 3 ma się pilnować by nie podawać innemu hasła. Masz 2 scenariusze do wyboru jak wspomniał Jacek. Albo wypychasz jednego użytkownika albo blokujesz logowanie. Ewentualnie zostawiasz jak jest czyli nie robisz z nimi nic.

System robiony jest dla użytkownika, a nie odwrotnie. To użytkwonik wymaga, a nie my od niego i im bardziej system jest jemu przyjazny, tym więcej użytkowników zyskujesz.

Pisząc wadliwe systemy które są obsługiwane w wadliwy sposób jakoś nie jest wg mnie "pisaniem dla użytkownika" i jest dalekie od "przyjaznego".

Rodzaj systemu nie ma tutaj nic do znaczenia. Staram się zorientować w możliwych rozwiazaniach.

No właśnie ma. Jeżeli to np komercyjna gra to najlepszym wyjściem jest wypychanie lub ignorowanie z uwagi na to że użytkownik może logować się z wielu urządzeń. Jeżeli intranet firmowy to chcemy mieć ścisłą kontrolę tego kto z niego korzysta i blokowanie jest lepszym wyjściem. Gdzie za blokowaniem jest natychmiastowe zgłaszanie faktu itp. Dodatkowo można wprowadzić ewentualną autoryzację urządzeń i tym podobne.

W pierwszym poście dodałem też wzmiankę o ograniczeniu do 3 użytkowników na jedno konto. Być może faktycznie nie jest to dość jacne.

Dlatego pisałem o 3 a nie o 4. Jeżeli max to 3 to wiadomo - czwarty wypchnie jednego z nich. Chyba że ten użytkownik jest jednym z zalogowanych wiec wypycha starą sesję. Przy czym taka przepychanka gdzieś powinna być zgłaszana bo to sugeruje że znowu ktoś korzysta z aplikacji w nieprawidłowy sposób...

Mówisz mi że "nie pracowałem/pracuje w korporacji". Ta Twoja "korporacja" jest chyba pierwszą o jakiej słyszałem która pozwala na anonimowy dostęp do systemu (bo trudno nazwać to inaczej skoro ludzie logują się na jedno konto) co właściwie pozwala na zrobienie kupy rzeczy i uniknięcie odpowiedzialności. Pisząc intranet dla jednej firmy jednym z pierwszych wymagań było to by działalność użytkownika była stale logowana ze szczególnym zwróceniem uwagi na przykładowo zmianę IP/useragent itp w trakcie sesji użytkownika + możliwość ubijania sesji użytkowników przez administratora (zdalne wylogowanie).
Nie mogłeś nawet przeczytać swoich wiadomości bez pozostawienia informacji w systemie co akurat czytałeś.
Gdzie to wcale duża firma nie była. A ty mi mówisz że jakaś "korporacja" robi takie jaja.
Emil T.

Emil T. Student, Uniwersytet
Marii
Curie-Skłodowskiej w
Lublinie

Temat: Logowanie na kilku komputerach

Po co te nerwy....

Nikt nie powiedział, że to system dla korporacja, a tym bardziej firmy dla której pracuję.
Ten post ani trochę nie ma charakteru zawodowego, ponieważ na codzień pracuję w zupełnie innej działce.

Nie zdarzyło Ci się tak, że użytkownik miał problem z Windows, a dzwonił / pisał do administratora, że system nie działa i żeby to naprawić. Czasem jest tak, że użytkownik nawet nie wie, jak korzystać z zakładek w przeglądarce. Użytkownicy nie koniecznie są aż tak świadomi, jakby się wydawało.

PS.
Poznałem już Twój punkt widzenia na sprawę, dzięki za wyczerpójący wykład :)
Na pewno w przyszłości będę do postów załączał kompletny opis problemu.

konto usunięte

Temat: Logowanie na kilku komputerach

Emil T.:
Po co te nerwy....

Nikt nie powiedział, że to system dla korporacja, a tym bardziej firmy dla której pracuję.
Ten post ani trochę nie ma charakteru zawodowego, ponieważ na codzień pracuję w zupełnie innej działce.

Nie zdarzyło Ci się tak, że użytkownik miał problem z Windows, a dzwonił / pisał do administratora, że system nie działa i żeby to naprawić. Czasem jest tak, że użytkownik nawet nie wie, jak korzystać z zakładek w przeglądarce. Użytkownicy nie koniecznie są aż tak świadomi, jakby się wydawało.

PS.
Poznałem już Twój punkt widzenia na sprawę, dzięki za wyczerpójący wykład :)
Na pewno w przyszłości będę do postów załączał kompletny opis problemu.

Żadne nerwy. Wyjaśniam bo mi się kupy to wszystko nie trzymało. Postaw jasne cele to dostaniesz jasne rozwiązania. W twoim wypadku to 2 możliwości. Albo blokujesz próbującego zalogować się użytkownika albo wypychasz sesję która jako ostatnia wykonała akcję (lub najstarszą sesję). Limit sesji zależy od Ciebie.

Jak bym taki problem miał w intranecie to bym jak już zmienił zachowanie kont użytkowników właśnie wprowadzając przypisywanie kont do zasobów.

Mechanizm był by relatywnie prosty. Wszystkie dane w systemie zapewne są powiązane do klucza głównego ID użytkownika.
Więc wprowadził bym NOWY system kont i zmienił tylko mechanizm logowania by nie korzystał ze starej tabeli. Wystarczy właściwie skopiować tabelę użytkowników i zmienić źródło danych na skopiowaną tabelę prawda ? W grę wchodzi właściwie tylko modyfikacja zapytań.

W ten sposób "odcinasz" użytkowników od danych do których są powiązani. To KROK PIERWSZY.

KROK DRUGI jest bardziej pokręcony. Traktujemy starą tabelę użytkowników jak tabelę zasobów. Czyli mamy ID zasobu i wszystkie dane do niego powiązane (jeżeli tak był skonstruowany system). Do panelu dopisujemy zarządzanie "zasobami" czyli właściwie bierzemy zarządzanie kontami i wywalamy zbędne pola skoro tym razem potrzebna nam podstawka - id i nazwa.

KROK TRZECI - robimy dodatkowy element w panelu. Przypisanie "zasobów" do "kont użytkowników" co skutkuje tym że każde konto ma przypisany swój ID i jeżeli ktoś się loguje na to konto jego ID w sesji to ID przypisanego "zasobu".

W skrócie - każdy pracownik może logować się TYLKO NA SWOJE KONTO ale kilku pracowników może korzystać z jednego konta. Nie trzeba niczego eliminować, blokować itp bo pracownicy nie powinni dzielić się swoim hasłem.

Oczywiście to gdybanie bo nie wiem co to za system macie i jak jest skonstruowany. Minus rozwiązania to to że jest bardziej złożone niż założenie protezy o której do tej pory dyskutowaliśmy. Plus jest taki że nie ma głupich patologii w systemie, ograniczeń i blokad. Każdy ma swoje konto a kilka osób może korzystać z "jednego zasobu" czyli jednego "starego konta". Zarządzenie zasobami to tylko zarządzanie wpisami w starej tabeli z użytkownikami. Jak to dobrze zrobić to w samym systemie nie trzeba nic zrobić oprócz dodania nowej tabeli i modyfikacji w logowaniu użytkowników tak by ID użytkownika w sesji było ID przypisanego zasobu co spowoduje że system będzie działał bez zmian.
Tomek Hoff

Tomek Hoff IT - analiza,
projektowanie,
wdrożenia

Temat: Logowanie na kilku komputerach

wystarczy okreslić maxymalną ilość sesji dla konta, dodatkowym parametrem jest czas trwania sesji, którym mozna regulowac dozwolony czas nieaktywności na koncie (zwykle to 15-20 min)
nadliczbowy klient dostaje info o limicie jednoczesnych logowań, natomiast wylogowanie (zamykanie najstarszej aktywnej sesji) to zły pomysł

konto usunięte

Temat: Logowanie na kilku komputerach

Emil T.:
Użytkownicy jednak często piszą w takich przypadkach, żeby oddać im kasę, bo nie mogą korzystać z tego, za co zapłacili.

skoro robisz blokadę, to pewnie będą narzekać niezależnie jak system napiszesz.
w końcu kogoś przecież zablokujesz, czyż nie ?

a jeśli zakładasz że użytkownicy korzystają z systemu tak że nie przekroczą limitu 3 logowań, to po co robić blokadę ?

odnośnie rozwiązań. myślę, że wystarczy tabela trzymająca identyfikator sesji i id użytkownika, czas zalogowania i ostatniej aktywności.
za każdym odświeżeniem strony kasujesz stare sesje wg. ostatniej aktywności i dopuszczalnej długości sesji.
sprawdzasz czy już na dany login masz trzy sesje, jeśli tak to wyświetlasz komunikat za ile czasu będzie można spróbować się zalogować.
albo wywalasz najdłużej trwającą sesję i logujesz danego usera.

konto usunięte

Temat: Logowanie na kilku komputerach

Krzysztof D.:
Emil T.:
Użytkownicy jednak często piszą w takich przypadkach, żeby oddać im kasę, bo nie mogą korzystać z tego, za co zapłacili.

skoro robisz blokadę, to pewnie będą narzekać niezależnie jak system napiszesz.
w końcu kogoś przecież zablokujesz, czyż nie ?

a jeśli zakładasz że użytkownicy korzystają z systemu tak że nie przekroczą limitu 3 logowań, to po co robić blokadę ?

odnośnie rozwiązań. myślę, że wystarczy tabela trzymająca identyfikator sesji i id użytkownika, czas zalogowania i ostatniej aktywności.
za każdym odświeżeniem strony kasujesz stare sesje wg. ostatniej aktywności i dopuszczalnej długości sesji.
sprawdzasz czy już na dany login masz trzy sesje, jeśli tak to wyświetlasz komunikat za ile czasu będzie można spróbować się zalogować.
albo wywalasz najdłużej trwającą sesję i logujesz danego usera.

Z tego co zrozumiałem jego problem jest taki że do każdego konta w aplikacji loguje się kilka albo nawet kilkanaście (kilkadziesiąt ?) osób i ktoś im kazał to ograniczyć. Narzuć ograniczenia i dorzuć do tego np takiego gościa jak ja który może być zalogowany na PC, laptopie, telefonie czy tablecie i jeżeli (zwłaszcza z urządzeń przenośnych) się nie wyloguję to sam mogę wykończyć limit...

Jak mówiłem - radzę przede wszystkim zastanowić się nad przerobieniem kont obecnych użytkowników na "zasoby" żeby nie rozwalać struktury aplikacji (to tylko zmiana naklejki) i zrobić nowy system kont i przypisywać do nich po prostu odpowiedni "zasób". Wtedy limit w ogóle nie jest potrzebny bo każdy ma swoje uprawnienia i nie trzeba się martwić że zbyt dużo osób ma dostęp bo ten mają tylko ci co muszą go mieć.

konto usunięte

Temat: Logowanie na kilku komputerach

Dariusz - rozwiń ten pomysł z zasobami.
Bo za cholerę nie rozumiem co masz na myśli, a ciekaw jestem.

Następna dyskusja:

pobieranie danych z kilku t...




Wyślij zaproszenie do