Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Logowanie w tym samym czasie
Forum PHP.pl > Forum > Przedszkole
MeGusta
Witam,
Jak można zrobić aby użytkownik nie mógł się zalogować na dwóch kartach/przeglądarkach/komputerów na to samo konto? Po prostu aby sesja trwała tylko w tej karcie w której sie zalogujemy.
Pyton_000
Sprawdzasz czy sesja już istnieje i tyle. Tyle że musisz sobie gdzieś w BD zapisać relację user->session_id
MeGusta
Przy logowaniu mam zapisywać wartość sesji i w index'ie sprawdzać czy sesja jest rowna tej sesji zapisanej do bazy przy logowaniu? Tak myślę, ale jak np. ktoś się zaloguje i otworzy stronę w dwóch kartach? nie będzie sie musiał logować drugi raz przecież i normalnie mu zadziała.
b4rt3kk
Cytat(MeGusta @ 22.08.2017, 13:50:51 ) *
Przy logowaniu mam zapisywać wartość sesji i w index'ie sprawdzać czy sesja jest rowna tej sesji zapisanej do bazy przy logowaniu? Tak myślę, ale jak np. ktoś się zaloguje i otworzy stronę w dwóch kartach? nie będzie sie musiał logować drugi raz przecież i normalnie mu zadziała.


Ale przecież sesja jest jedna na jednego klienta, w tym przypadku na wszystkie otwarte karty w danej przeglądarce. Jeśli byłoby inaczej, to za każdym razem, otwierając coś w nowej karcie, musiałbyś się logować, a to by było niezwykle nieporęczne.

Chyba, że masz na myśli sytuację, że ktoś otwiera 10 kart, na każdej z nich panel logowania i próbuje się logować na każdej z nich. W takiej sytuacji po prostu zabezpieczasz panel logowania metodą/funkcją, która sprawdza, czy użytkownik nie jest już zalogowany. W przeciwnym przypadku następuje przekierowanie.

  1. if ($this->isUserLogged()) {
  2. // użytkownik jest już zalogowany, następuje przekierowanie
  3. // np. na stronę z jego kontem
  4. header("Location: url.php");
  5. }
  6.  
  7. // jeśli znajdujemy się w tym miejscu kodu, oznacza to, że użytkownik się nie zalogował
  8. // możemy wyświetlić mu formularz logowania
  9. echo $this->form();


MeGusta
Głównie chodzi tylko o jedna podstronę (dostepna po zalogowaniu) aby można ją było otworzyć w tym samym czasie na jednym koncie tylko raz i aby sobie nie odpalali jej na kilku kartach na raz.
Pyton_000
A co ta strona robi?
b4rt3kk
Cytat(MeGusta @ 22.08.2017, 15:18:01 ) *
Głównie chodzi tylko o jedna podstronę (dostepna po zalogowaniu) aby można ją było otworzyć w tym samym czasie na jednym koncie tylko raz i aby sobie nie odpalali jej na kilku kartach na raz.


Czyli widzisz, jeśli w tym rzecz, to nie chodzi tylko i wyłącznie o karty w ramach tej samej przeglądarki, bo przecież można otworzyć ich kilka (ja np. mam 5 różnych przeglądarek zainstalowanych), a każda przeglądarka to osobna sesja.

Więc po pierwsze musisz wyeliminować możliwość wielokrotnego logowania, kiedy nastąpiło już zalogowanie (względnie wylogować użytkownika na innych urządzeniach, jeśli zalogował się na kolejnym).

A druga sprawa to możliwość jedynie 1-krotnego otworzenia danej podstrony. Tutaj proponowałbym żebyś dodał jakiś unikatowy hash, stanowiący id otwartej karty - z jakimś czasem życia, najlepiej równym czasowi życia sesji lub do wylogowania się użytkownika.

Jeszcze pytanie, co na tej podstronie ma się dziać? Bo jeśli wymaga ciągłego odświeżania to sprawa staje się nieco trudniejsza.
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-2025 Invision Power Services, Inc.