Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> System logowania - kilka pytań
akurczyk
post
Post #1





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


Napisałem prosty system logowania oparty na 3 plikach index.php (dla gościa: formularz logowania, dla użytkownika: możliwość wylogowania), zalogowanie.php i wylogowanie.php.
I w związku z tym mam kilka pytań:
1. Jak zrobić takie logowanie jak na tym forum. Co na nie wejdę to jestem zalogowany.
2. Jak zrobić time outy?
3. Jak zrobić listę zalogowanych użytkowników (uwzględniając time outy itp.)?

Pliki:
index.php:
  1. <?php
  2.  if(isset($_SESSION['zalogowany']) && $_SESSION['zalogowany'] == "tak") {
  3.  echo "<form..."; //Formularz
  4.  } else {
  5.  echo "<a href..."; //Link do wylogowanie.php
  6.  }
  7.  ?>


zalogowanie.php:
  1. <?php
  2.  //W tym miejscu połączenie z db
  3.  if(isset($_POST['zaloguj_sie']) && isset($_POST['login']) && !empty($_POST['login']) && isset($_POST['haslo']) && !empty($_POST['haslo'])) {
  4.  $zapytanie = mysql_query("SELECT * FROM uzytkownicy WHERE login='".addslashes($_POST['login'])."' AND haslo='".addslashes($_POST['haslo'])."'");
  5.  if(mysql_num_rows($zapytanie) == 1) {
  6.  while($wiersz = mysql_fetch_array($zapytanie)) {
  7.  $_SESSION['zalogowany'] == "tak";
  8.  $_SESSION['id'] == $wynik['id'];
  9.  }
  10.  }
  11. header("Location: index.php");
  12.  ?>


wylogowanie.php:
  1. <?php
  2.  if(isset($_GET['zalogowany']) && $_SESSION['zalogowany'] == "tak") {
  3.  }
  4.  header("Location: index.php");
  5.  ?>


Proszę o odpowiedzi na wcześniej zadane pytania i sugestie dotyczące mojego systemu logowania.
PS: Może połączyć kody plików zalogowanie.php i wylogowanie.php? Tylko niewiem jak nazwać plik z połączonym kodem?


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Berg
post
Post #2





Grupa: Zarejestrowani
Postów: 180
Pomógł: 37
Dołączył: 1.05.2008
Skąd: Białystok

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


Musisz ustawić czas życia sesji :

  1. <?php
  2.  
  3. if(!empty($_COOKIE[session_name()])) {
  4.  $time = 3600; // Ustawienie sesji na 1h
  5.  
  6.  setcookie(session_name(), session_id(), date('U') + $time, "/"); // ciasteczko sesji będzie ważne przez godzinę od chwili uruchomienia skryptu
  7. }
  8. else { // Ciasteczko nie istnieje więc użytkownik był nieakatywny przez jedną godzinę
  9.  echo 'Zaloguj się pod <a href="logowanie.php">tym</a> adresem.';
  10. }
  11. ?>


Wrzucasz coś takiego do każdego pliku, jeśli istnieje ciasteczko z kluczem sesji to ustawiasz czas życia ciasteczka za pomocą session_set_cookie_params, odpalasz sesje i modyfikujesz ciasteczko tak aby data jego istnienia wynosiła 1 godzinę od chwili uruchomienia skryptu (date('U') + $time). Jeśli użytkownik nie uruchomi żadnego skryptu przez jedną godzinę to ciasteczko przestanie istnieć, nie będzie więc można wystartować sesji i użytkownik będzie musiał się zalogować jeszcze raz. Co do listy aktywnych użytkowników to możesz przy każdym wywołaniu skryptu wpisywać do bazy danych datę ostatniej aktywności użytkownika, potem pobierasz z bazy danych nazwy tylko tych użytkowników których data ostatniej aktywności jest nie większa niż 1h.
Go to the top of the page
+Quote Post
akurczyk
post
Post #3





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


a jak w takim wypadku wyglądał by kod pliku logowania?questionmark.gif


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
Berg
post
Post #4





Grupa: Zarejestrowani
Postów: 180
Pomógł: 37
Dołączył: 1.05.2008
Skąd: Białystok

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


  1. <?php
  2.  //W tym miejscu połączenie z db
  3.  if(isset($_POST['zaloguj_sie']) && isset($_POST['login']) && !empty($_POST['login']) && isset($_POST['haslo']) && !empty($_POST['haslo'])) {
  4.  $zapytanie = mysql_query("SELECT * FROM uzytkownicy WHERE login='".addslashes($_POST['login'])."' AND haslo='".addslashes($_POST['haslo'])."'");
  5.  if(mysql_num_rows($zapytanie) == 1) {
  6.  while($wiersz = mysql_fetch_array($zapytanie)) {
  7.  
  8.  $time = 3600;
  9.  setcookie(session_name(), session_id(), date('U') + $time, "/");
  10.  
  11.  $_SESSION['id'] == $wynik['id'];
  12.  }
  13.  }
  14. header("Location: index.php");
  15.  
  16. ?>


Przy wylogowaniu wystarczy ustawić czas życia ciasteczka na ujemny a sesja zostanie zniszczona:

  1. <?php
  2.  if(!empty($_COOKIE[session_name()])) {
  3.  
  4. setcookie(session_name(), 'del', date('U') - 100, "/");
  5.  }
  6.  header("Location: index.php");
  7.  ?>
Go to the top of the page
+Quote Post
akurczyk
post
Post #5





Grupa: Zarejestrowani
Postów: 201
Pomógł: 5
Dołączył: 15.07.2008
Skąd: Kłodzko

Ostrzeżenie: (10%)
X----


a jak zrobić wieczne zalogowanie tak jak jest na tym forum??


--------------------
Pozdrawiam
Aleksander Kurczyk
Porady dla webmasterów
Go to the top of the page
+Quote Post
wlamywacz
post
Post #6





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


cookes" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
koirat
post
Post #7





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 2.09.2008

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


Czesto jak sie loguje na jakimś serwisie to mam w adresie parametr identyfikujacy mnie cos w stylu numer sesji albo jakis hash code. Po co sie to robi. Daje mi to jakies dodatkowe zabezpieczenie, nie mozna tego zrobić po prostu za pomoca sesji i już żadnych parametrow w adresie nie miec ?
Go to the top of the page
+Quote Post
Berg
post
Post #8





Grupa: Zarejestrowani
Postów: 180
Pomógł: 37
Dołączył: 1.05.2008
Skąd: Białystok

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


Logowanie oparte na cookies ma jedną wadę - użytkownik może je wyłączyć przez co nie będzie mógł się zalogować. Sposobem na przechowanie identyfikatora sesji bez potrzeby angażowania cookies jest właśnie doklejanie go do adresu.
Go to the top of the page
+Quote Post
wlamywacz
post
Post #9





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Berg
A bezpieczeństwo? blinksmiley.gif
Go to the top of the page
+Quote Post
Berg
post
Post #10





Grupa: Zarejestrowani
Postów: 180
Pomógł: 37
Dołączył: 1.05.2008
Skąd: Białystok

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


Nie napisałem, że ten sposób jest bezpieczny, jeśli użytkownik podaje linka z takim identyfikatorem to praktycznie oddaje swoje konto innym. Dodatkowo dochodzi problem z time-outem i SEO. Dlatego ja rozwiązania z identyfikatorami w url nie stosuje, ostatecznie nikt normalny nie wyłącza cookies winksmiley.jpg
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 Aktualny czas: 21.08.2025 - 05:07