Skocz do zawartości
Michael2318

[PHP/MySQL] Opcja "zaloguj automatycznie"

Polecane posty

Michael2318

Jeśli często odwiedzamy jakąś stronę i wymagane jest logowanie to wręcz denerwujące jest to, że za każdym razem musimy się logować. Chociaż faktem jest, że w przeglądarkach są opcje, które zapamiętują dane do naszego logowania, ale co z tego, skoro i tak musimy przejść przez etap logowania Dlatego właśnie przedstawię tutaj jak dodać opcję automatycznego logowania na stronę www. Bazować będę na swoim skrypcie LOGOWANIA & REJESTRACJI NA SESJACH, ale to w zasadzie można podpiąć pod inne tego rodzaju skrypty

Skrypt opierać się będzie na ciastku, które będziemy tworzyć podczas logowania do serwisu. Aby takie logowanie było bezpieczne i aby nikt nie mógł się zalogować na konto innego użytkownika, tworząc ciacho z groźną zawartością umożliwiającą takie zalogowanie się, musimy generować przy każdym logowaniu losowy ciąg znaków, zapisywać je do ciastka i później sprawdzać przy wejściu na stronę czy zawartość ciastka (losowego ciągu znaków) pasuje do któregoś z użytkowników. Teoretycznie na tyle, przejdźmy do praktyki.

Najpierw musimy dodać do bazy pole, w którym będziemy przetrzymywać wspomniany wyżej losowy ciąg znaków. Wykonujemy więc takie zapytanie:

ALTER TABLE `users` ADD `session_id` char(30) NOT NULL DEFAULT '0';

Teraz wykorzystamy funkcję generującą losowy ciąg znaków. Dodajemy więc kod tej funkcji na początku pliku z logowaniem.
Następnie musimy do formularza z logowaniem dodać pole typu radio do zaznaczania (bądź nie) opcji zalogowania automatycznego. Zmieniamy więc ten kod z mojego poradnika dot. logowania i rejestracji:

   $body = 'Witaj gosc! Zaloguj sie ;)<br><form action="index.php" method="post"><table><tr><td>Login: <input type="post" name="login" maxlength="25"></td></tr><tr><td>Haslo: <input type="password" name="password" maxlength="35"></td></tr><tr><td><input type="submit" name="submit" value="Zaloguj"></td></tr></table></form><br>Lub <a href="index.php?action=register">ZAREJESTRUJ SIE!</a>'; 

na:

   $body = 'Witaj gosc! Zaloguj sie ;)<br><form action="index.php" method="post"> 
<table><tr><td>Login: <input type="post" name="login" maxlength="25"></td></tr> 
<tr><td>Haslo: <input type="password" name="password" maxlength="35"></td></tr> 
<tr><td>Zaloguj automatycznie: <input type="radio" name="autologin" value="true"></td></tr> 
<tr><td><input type="submit" name="submit" value="Zaloguj"></td></tr></table></form><br>Lub <a href="index.php?action=register">ZAREJESTRUJ SIE!</a>'; 
   echo $body;

A następnie w tym fragmencie:

           $row = mysql_fetch_assoc($result); 
           $_SESSION['nazwa'] = $row['id']; 

Musimy dodać aktualizację losowego ciągu znaków do bazy danych, wykorzystując wcześniej dodaną funkcję. Zmieniamy więc powyższy kod na:

           $row = mysql_fetch_assoc($result); 
           $rand_id = generate_password(); 
           $query = "UPDATE `users` SET session_id = '".$rand_id."' WHERE id = ".$row['id'].""; 
           $res = mysql_query($query) 
               or die(mysql_error()); 
           if ( isset($_POST['autologin']) && $_POST['autologin'] == 'true' ) 
           { 
               setcookie('autologin', $rand_id, time() + 30 * 86400); // automatyczne logowanie będzie "trzymało" 30 dni - liczba 30 oznacza liczbę dni istnienia ciasteczka 
           } 
           $_SESSION['nazwa'] = $row['id']; 

Teraz pozostało dodać jeszcze warunek, że jeśli ciacho istnieje to user automatycznie jest logowany na swoje konto. Kod ten można dodać albo na początku pliku login.php lub w miejsce, gdzie dany kod jest wczytywany w każdym miejscu strony (przykładem może być plik config.php w którym przeważnie przetrzymuje się dane do bazy - jest on wczytywany zawsze i wszędzie, aby umożliwić połączenie do bazy). Jeśli kod umieścisz na początku login.php to user będzie automatycznie logowany dopiero w przypadku gdy odpali ten plik (czyli gdy wejdzie pod adres http://twojastrona.pl/login.php).

if ( isset($_COOKIE['autologin']) && strlen($_COOKIE['autologin']) == 30 ) 
{ 
   $session_cookie_id = mysql_escape_string($_COOKIE['autologin']); 
   $sql = "SELECT * FROM `users` WHERE session_id = '".$session_cookie_id."' LIMIT 1"; 
   $result = mysql_query($sql) 
       or die(mysql_error()); 
   $row = mysql_fetch_assoc($result); 
   $num = mysql_num_rows($result); 
   if ( $num != 0 ) 
   { 
       $_SESSION['nazwa'] = $row['id']; 
   } 
   else 
   { 
       setcookie('autologin', time(), time() - 30 * 86400); // usuwamy ciasteczko bo sesja ID jest zła, chyba ktoś kombinował coś z ciastkiem i chciał się wbić na czyjeś konto 
    } 
}

Musimy jeszcze tylko usunąć ciasteczko auto-logujące, w przypadku gdy user się wyloguje. W przeciwnym razie jeśli np. przez przypadek zaznaczyłby auto-logowanie na nieswoim komputerze, skrypt cały czas logowałby na to samo konto, nie można by było się też zalogować na inne konto ;) Zmieniamy więc ten kod:

if ( isset($_GET['action']) && htmlspecialchars($_GET['action']) == 'wyloguj' ) 
{ 
   header('Location: index.php'); 
   session_destroy(); 
}

na:

if ( isset($_GET['action']) && htmlspecialchars($_GET['action']) == 'wyloguj' ) 
{ 
   header('Location: index.php'); 
   setcookie('autologin', time(), time() - 30 * 86400); 
   session_destroy(); 
}

To wszystko ;) 
Poradnik napisany przez: Michael2318

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Przempox

Poradnik przydatny , na pewno komuś się przyda dzięki :D .

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
bootek

Michael2318, kozacki poradnik.

Napisał byś jeszcze poradnik z Rejestracja i logowaniem ze edycja profilu, przypomnieniem hasła ;d itp ;d

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Michael2318

Przypomnienie hasła mam zrobione już u siebie bo do swojego CMSa potrzebowałem, jak znajdę chwilkę to opublikuję. Edycja profilu to chyba zbyt wielki banał, no ale mogę dodać.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość
Temat jest zablokowany i nie można w nim pisać.
  • Podobna zawartość

    • -n3veR
      Przez -n3veR
      Siemanko! 🙂 
       
      Od sierpnia wystartowałem z JDG i szukam zleceń (tych małych i tych większych też) po godzinach.
       
      Jeżeli masz jakiś pomysł na biznes, ale sam nie ogarniesz kwestii technicznych, to napisz do mnie - może się dogadamy.
      A może masz już biznes i potrzebujesz wsparcia? To też do mnie napisz!
      Nie jestem naciągaczem. Jeżeli wiem, że czegoś nie zrobię, to napiszę Ci to przed jakimikolwiek pracami.
       
      Niestety jestem VAT-owcem, więc VAT jest po stronie odbierającego oprogramowanie - czyli Twojej.
      Stawka netto do uzgodnienia po zapoznaniu się ze zleceniem, jednak nie mniej niż 40 PLN / h.
      Pracuję zdalnie i po godzinie 17:00 jestem do Twojej dyspozycji.
       
      Zainteresowane osoby zapraszam na priv 🙂 
    • Marta Długa
      Przez Marta Długa
      Skrypt, który ma pokazać ile dni ma dany miesiąc po wskazaniu miesiąca i roku z formularza przez użytkownika.  
       
      Nie wiem gdzie mam błąd. Proszę o poprawienie błędu w kodzie php.
      <form action="ostatni_dzien_miesiaca.php" method="post"> <label for="miesiac">Miesiąc:</label> <select name="miesiac"> <?php for($l=1; $l<=12;++$l) echo '<option value="'.$l.'">'.$l.'</option>'; ?> </select></br></br> <label for="rok">Rok:</label> <select name="rok"> <?php for($i=1900; $i<=2090;++$i) echo '<option value="'.$i.'">'.$i.'</option>'; ?> </select></br></br> </br></br><input type="submit" name="sprawdz" value="Sprawdź dzień tygodnia" /> </br></br><input type="reset" name="reset" value="Wyczyść" /> </form> <?php $rok['rok'] = $miesiac['miesiac']; for ($i = 1; $i <= 12; $i++) { $miesiac[$i] = date("t", mktime(0, 0, 0, $i, 1, $rok)); } var_dump($miesiac); ?>  
    • Marta Długa
      Przez Marta Długa
      Witam Jestem początkująca .
      Chce zrobić kalkulator z jednym polem input, gdzie użytkownik wprowadza działanie np. 2 + 2 = lub 2 + 2 + 2 = itp. Użytkownik może wprowadzić dowolną ilość liczb np. 2 + 2 +  2 + 2 = Po kliknięciu oblicz pokazuje się wynik.
      Zrobiłam formularz html, ale nie wiem jak zrobić php. Proszę o pomoc.
       
      <form action="kalkulator2.php" method="post"> <p>Wpisz działanie</p> <input type="text" name="oblicz_dane" placeholder="wprowadż działanie"> </form> <p>Wynik</p>  
×
×
  • Utwórz nowe...