Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]logowanie tylko jeden user
art998
post 9.08.2018, 03:12:13
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 14.10.2016

Ostrzeżenie: (0%)
-----


Witam. W jaki sposób do skrptu logowania dodać warunek, który sprawdzi że w chwili obecnej jest już zalogowany użytkownik i zablokuje (przerwie) logowanie lub przekieruje na podstronę z komunikatem o zalogownym wcześniej user-ku.

Na skrypcie pracuje kilka osób, które mają ten sam login i hasło.

...a przy okazji mam pytanie, jak zachowuje się skrypt php gdy pracuje na nim w tym samym czasie kilka osób ? - chodzi mi o wprowadzanie danych, zapis do bazy

  1. if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])) )
  2. {
  3. header('Location: index.php');
  4. exit();
  5. }
  6. require_once "connect.php";
  7. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
  8. if ($connect->connect_errno!=0)
  9. {
  10. echo "Error: ".$connect->connect_errno;
  11. }
  12. else
  13. {
  14. $login = $_POST['login'];
  15. $haslo = $_POST['haslo'];
  16.  
  17. $login = htmlentities($login, ENT_QUOTES, "UTF-8");
  18. $haslo_hash = password_hash($haslo, PASSWORD_DEFAULT);
  19.  
  20. if ($rezultat = @$connect->query(
  21. sprintf("SELECT * FROM uzytkownicy WHERE user='%s' ", mysqli_real_escape_string($connect,$login))))
  22. {
  23. $ilu_userow = $rezultat->num_rows;
  24. if($ilu_userow>0)
  25. {
  26. $wiersz = $rezultat->fetch_assoc();
  27.  
  28. if (password_verify($haslo, $wiersz['pass']))
  29. {
  30. $_SESSION['zalogowany'] = true;
  31. $_SESSION['id'] = $wiersz['id'];
  32. $_SESSION['user'] = $wiersz['user'];
  33.  
  34.  
  35. unset($_SESSION['blad']);
  36. $rezultat->free_result();
  37. header('Location: strona.php');
  38. }
  39. else {
  40. $_SESSION['blad'] = 'Nieprawidłowy login lub hasło !';
  41. header('Location: index.php');
  42. }
  43. }
  44. else {
  45. $_SESSION['blad'] = 'Nieprawidłowy login lub hasło !';
  46. header('Location: index.php');
  47. }
  48.  
  49. }
  50. $connect->close();
  51. }
  52.  
Go to the top of the page
+Quote Post
leonpro778
post 9.08.2018, 11:32:54
Post #2





Grupa: Zarejestrowani
Postów: 146
Pomógł: 19
Dołączył: 1.03.2012

Ostrzeżenie: (0%)
-----


Przykładowo:

  1. sprintf("SELECT * FROM uzytkownicy WHERE user='%s' AND is_logged = false", mysqli_real_escape_string($connect,$login))))


Następnie po zalogowaniu ustawiasz pole is_logged na TRUE i po problemie. Oczywiście odwrotną akcję (zmieniasz na FALSE) robisz przy wylogowaniu użytkownika. Dodatkowym problemem będzie wtedy, gdy użytkownik zamiast wylogować się, zamknie przeglądarkę (lub komp się zawiesi czy coś tam) i pozostanie zalogowany. To możesz rozwiązać jakimś licznikiem czasu nieaktywności, który po (przykładowo) 10 minutach nieaktywności użytkownika pozwoli na zalogowanie się usera, który ma status is_logged = true
Go to the top of the page
+Quote Post
art998
post 9.08.2018, 13:04:03
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 14.10.2016

Ostrzeżenie: (0%)
-----


Dziękuję, próbuję to ogarnąć biggrin.gif

Cytat(leonpro778 @ 9.08.2018, 12:32:54 ) *
Przykładowo:

  1. sprintf("SELECT * FROM uzytkownicy WHERE user='%s' AND is_logged = false", mysqli_real_escape_string($connect,$login))))


Następnie po zalogowaniu ustawiasz pole is_logged na TRUE i po problemie. Oczywiście odwrotną akcję (zmieniasz na FALSE) robisz przy wylogowaniu użytkownika. Dodatkowym problemem będzie wtedy, gdy użytkownik zamiast wylogować się, zamknie przeglądarkę (lub komp się zawiesi czy coś tam) i pozostanie zalogowany. To możesz rozwiązać jakimś licznikiem czasu nieaktywności, który po (przykładowo) 10 minutach nieaktywności użytkownika pozwoli na zalogowanie się usera, który ma status is_logged = true

Dzięki, sposób prosty i skuteczny.

Cytat
Dodatkowym problemem będzie wtedy, gdy użytkownik zamiast wylogować się, zamknie przeglądarkę (lub komp się zawiesi czy coś tam) i pozostanie zalogowany. To możesz rozwiązać jakimś licznikiem czasu nieaktywności, który po (przykładowo) 10 minutach nieaktywności użytkownika pozwoli na zalogowanie się usera, który ma status is_logged = true

...faktycznie, na 100% to się wydarzy. Jak zabrac się za ten licznik czasu nieaktywności ?
Go to the top of the page
+Quote Post
leonpro778
post 9.08.2018, 14:04:33
Post #4





Grupa: Zarejestrowani
Postów: 146
Pomógł: 19
Dołączył: 1.03.2012

Ostrzeżenie: (0%)
-----


Dodajesz do tabeli users jeszcze jedną kolumnę (przykładowo) activity_time i w niej zapisujesz KAŻDĄ czynność wykonaną przez zalogowanego użytkownika (łącznie z logowaniem i wylogowaniem). I teraz przypuśćmy, że użytkownik nie wylogował się poprawnie i kolejny próbuje się zalogować. Sprawdzasz czas próby logowania z czasem ostatniej aktywności i jeżeli ta różnica wyniesie więcej niż 10 minut to pozwalasz zalogować się do programu.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 12:01