Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]system logowania dla trzech użytkowników - jeden online
Forum PHP.pl > Forum > Przedszkole
art998
Dzień dobry, czy można jakoś dostosować ten skrypt logowania ( lub podsunąć jakiś pomysł ) jak zrobić logowanie do programu aby zalogowany mógł być TYLKO JEDEN użytkownik (pozostali dostają info o braku możliwości zalogowania)
W bazie userów mam tylko trzy osoby i więcej nie będzie.

Próbowałem dodać dodatkowe pole które wskazywało, że jest ktoś już zalogowany ale po zamknięciu przeglądarki ( nie przez opcję wyloguj) wszystko bierze w łeb ;-)
Kombinowałem też z czasem ostatniej aktywności i po określonym czasie automatyczne wylogowanie lecz to rozwiązanie nie za bardzo mogę zastosować.
Zakładam też, że nie można przejąć sesji zalogowanego użytkownika i wylogować go z innego kompa.

Mam jeszcze pytanie czy zadanie crona do wykonania co 10 min bardzo obciąża serwer?

Przykładowy system logowania:
  1. <?php
  2. if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])) )
  3. {
  4. header('Location: index.php');
  5. exit();
  6. }
  7. require_once "connect.php";
  8. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  9. if ($polaczenie->connect_errno!=0)
  10. {
  11. echo "Error: ".$polaczenie->connect_errno;
  12. }
  13. else
  14. {
  15. $login = $_POST['login'];
  16. $haslo = $_POST['haslo'];
  17.  
  18. $login = htmlentities($login, ENT_QUOTES, "UTF-8");
  19. $haslo_hash = password_hash($haslo, PASSWORD_DEFAULT);
  20.  
  21. if ($rezultat = @$polaczenie->query(
  22. sprintf("SELECT * FROM log_user WHERE user='%s'",mysqli_real_escape_string($polaczenie,$login))))
  23. {
  24. $ilu_userow = $rezultat->num_rows;
  25. if($ilu_userow>0)
  26. {
  27. $row = $rezultat->fetch_assoc();
  28.  
  29. if (password_verify($haslo, $row['pass']))
  30. {
  31. $_SESSION['zalogowany'] = true;
  32. $_SESSION['id'] = $row['id'];
  33. $_SESSION['user'] = $row['user'];
  34.  
  35. unset($_SESSION['blad']);
  36. $rezultat->free_result();
  37. header('Location: prog/zamowienie.php');
  38. }
  39. else
  40. {
  41. $_SESSION['blad'] = 'Nieprawidłowy login lub hasło !';
  42. header('Location: index.php');
  43. }
  44. }
  45. }
  46. }
  47.  
  48. $polaczenie->close();
  49. ?>
  50.  
  51.  
olszam
Może zapisuj czas każdego zdarzenia(np. przejście do następnej zakładki) i potem przy próbie logowania odliczyć czy od ostatniego zdarzenia minęło 10min, jak tak to niech przepuści a jak nie to niech wali errorem że już ktoś korzysta z tego biggrin.gif
leonpro778
Cytat(art998 @ 24.10.2018, 10:22:39 ) *
Kombinowałem też z czasem ostatniej aktywności i po określonym czasie automatyczne wylogowanie lecz to rozwiązanie nie za bardzo mogę zastosować.


Czemu nie możesz zastosować? Przecież taki timeout jest dla Ciebie właśnie dobrym rozwiązaniem.

Jeżeli chcesz innego rozwiązania to możesz również zrobić to w sposób następujący. Masz dodatkową tabelę tokens i przy logowaniu przypisujesz unikalny token dla użytkownika (przechowuj go przykładowo w sesji). Następnie ważność tokenu ustaw na 10 min i przedłużaj go przy każdej aktywności użytkownika.

Przy próbie zalogowania użytkownika sprawdzasz czy jest aktywny jakiś token i jeżeli jest to nie logujesz użytkownika.
art998
Cytat(leonpro778 @ 24.10.2018, 12:06:37 ) *
Czemu nie możesz zastosować? Przecież taki timeout jest dla Ciebie właśnie dobrym rozwiązaniem.

Jeżeli chcesz innego rozwiązania to możesz również zrobić to w sposób następujący. Masz dodatkową tabelę tokens i przy logowaniu przypisujesz unikalny token dla użytkownika (przechowuj go przykładowo w sesji). Następnie ważność tokenu ustaw na 10 min i przedłużaj go przy każdej aktywności użytkownika.

Przy próbie zalogowania użytkownika sprawdzasz czy jest aktywny jakiś token i jeżeli jest to nie logujesz użytkownika.


Oki, dzięki. Czyli jak widzę jest to jednak najbardziej optymalne rozwiązanie.

...a proszę jeszcze mi powiedzieć czy zadanie dla dla crona wykonywane co kilkanaście minut bardzo obciąża serwer ?
Ruch na stronie nie jest duży, sprowadza się do wypełnienia kilku formularzy dziennie przez kilku użytkowników.
markonix
Cytat(art998 @ 24.10.2018, 13:42:05 ) *
czy zadanie dla dla crona wykonywane co kilkanaście minut bardzo obciąża serwer ?

A czy wejście na stronę przez internautę co kilkanaście minut bardzo obciąża serwer ?
leonpro778
Cytat(art998 @ 24.10.2018, 13:42:05 ) *
Oki, dzięki. Czyli jak widzę jest to jednak najbardziej optymalne rozwiązanie.

...a proszę jeszcze mi powiedzieć czy zadanie dla dla crona wykonywane co kilkanaście minut bardzo obciąża serwer ?
Ruch na stronie nie jest duży, sprowadza się do wypełnienia kilku formularzy dziennie przez kilku użytkowników.


"Odpytanie" z bazy odnośnie użytkowników online raz na 10 minut przez crona to dla serwera niewiele. I to bardzo niewiele. Dodam tylko, że do tego nie potrzebujesz crona smile.gif
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.