Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System logowania - kilka pytań
Forum PHP.pl > Forum > PHP
akurczyk
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?
Berg
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.
akurczyk
a jak w takim wypadku wyglądał by kod pliku logowania?questionmark.gif
Berg
  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.  ?>
akurczyk
a jak zrobić wieczne zalogowanie tak jak jest na tym forum??
koirat
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 ?
Berg
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.
wlamywacz
Berg
A bezpieczeństwo? blinksmiley.gif
Berg
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
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.