Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]system logowania dla trzech użytkowników - jeden online
art998
post 24.10.2018, 09:22:39
Post #1





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

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


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.  
Go to the top of the page
+Quote Post
olszam
post 24.10.2018, 10:49:35
Post #2





Grupa: Zarejestrowani
Postów: 342
Pomógł: 23
Dołączył: 20.01.2011
Skąd: Chełm

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


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
Go to the top of the page
+Quote Post
leonpro778
post 24.10.2018, 11:06:37
Post #3





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

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


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.

Ten post edytował leonpro778 24.10.2018, 11:13:02
Go to the top of the page
+Quote Post
art998
post 24.10.2018, 12:42:05
Post #4





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

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


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.
Go to the top of the page
+Quote Post
markonix
post 24.10.2018, 13:06:00
Post #5





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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 ?


--------------------
Go to the top of the page
+Quote Post
leonpro778
post 24.10.2018, 13:38:54
Post #6





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

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


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
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: 1.07.2025 - 04:23