Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Wieczne logowanie
Forum PHP.pl > Forum > Przedszkole
Wieviór
Jaki macie dobry sposób na logowanie z zaznaczeniem opcji "Zapamiętaj"? Czytałem wiele na ten temat, i na forum i wyszukując i żadna metoda nie była dla mnie dobra, bo zawsze te sesje znikają :/

Mam taki kod:

index.php:
  1. <?php
  2. setcookie('PHPSESSID',session_id(),time()+3600*24*30,'/');
  3. setcookie('loginek', $_SESSION['loginek'], strtotime('+365 days'));
  4. setcookie('layout', $_SESSION['layout'], strtotime('+365 days'));
  5. setcookie('uid', $_SESSION['uid'], strtotime('+365 days'));
  6. setcookie('roz', $_SESSION['roz'], strtotime('+365 days'));
  7. ?>


ten plik includuje plik layout.php, który z kolei includuje plik log_in.php, w którym jest coś takiego:
  1. <?
  2. if (!isset ($_SESSION['loginek']))
  3. {
  4. if (!isset ($_POST['logowanie']))
  5. {
  6. echo '<form method="POST" action="index.php"><input type="hidden" name="logowanie">
  7. <table cellspacing="2">
  8. <tr><td>Login:</td><td><input type="text" name="login"></td></tr>
  9. <tr><td>Hasło:</td><td><input type="password" name="haslo"></td></tr>
  10. <tr><td colspan="2" height="5"></td></tr>
  11. <tr><td colspan="2" align="center"><input type="submit" value="Zaloguj" name="Submit"></td></tr>
  12. </table>
  13. </form><a href="">Rejestracja</a>';
  14. } else {
  15. if (!empty ($_POST['login']) AND !empty ($_POST['haslo']))
  16. {
  17. $sql = "SELECT * FROM users WHERE level>=1 AND login = '".$_POST['login']."'";
  18. $wykonaj = mysql_query($sql);
  19. $bazalogin = mysql_fetch_array($wykonaj);
  20. if ($bazalogin['haslo'] == $_POST['haslo'] AND $bazalogin['level'] >= '1')
  21. {
  22. echo 'Zalogowano pomyślnie!';
  23. $_SESSION['loginek'] = $bazalogin['login'];
  24. $_SESSION['layout'] = $bazalogin['layout'];
  25. $_SESSION['uid'] = $bazalogin['id'];
  26. $_SESSION['roz'] = $bazalogin['roz'];
  27. ?><script>setTimeout('document.location = "index.php"', 0);</script><?
  28. } else {
  29. echo 'Podano nieprawiłowe dane!';
  30. ?><script>setTimeout('document.location = "index.php"', 1000);</script><?
  31. }
  32. }
  33. }
  34. } else {
  35. if (!isset ($_GET['userakcja']))
  36. {
  37. echo '<b>Witaj '.$_SESSION['loginek'].'</b><br>&nbsp;::&nbsp;<a href="index.php?userakcja=logout">Wyloguj</a><br>&nbsp;::&nbsp;<a href="">Panel użytkownika</a>';
  38. } elseif ($_GET['userakcja'] == 'logout') { // Wyloguj
  39. echo 'Zostałeś wylogowany.';
  40. ?><script>setTimeout('document.location = "index.php"', 300);</script><?
  41. }
  42. }
  43. ?>


Logowanie działa, wylogowywanie też, i wszystko pięknie... no tylko jak zrobić z tą opcją "zapamiętaj mnie"...?
phpion
Cookies. Zauważ, że przy zamknięciu przeglądarki sesja znika, natomiast cookie (o ile ustawisz czas ważności) zostaje. Użyj więc cookies.
Hazel
A to akurat prawda nie jest - sesja znika po 24 minutach przy standardowych ustawieniach.
Zamknięcie przeglądarki nie ma wpływu na sesje.
phpion
Hmmm, a w przypadku przekazywania identyfikatora sesji GETem?
Wieviór
Cytat(phpion.com @ 8.09.2007, 10:38:23 ) *
Cookies. Zauważ, że przy zamknięciu przeglądarki sesja znika, natomiast cookie (o ile ustawisz czas ważności) zostaje. Użyj więc cookies.


Probowałem używać cookies, ale setcookie (); mogę przecież używać tylko na początku strony :/
phpion
No i? Przebuduj logowanie tak, żeby działało jak należy (najpierw operacje, później wyświetlanie danych) a pozbędziesz się tego problemu.
Wieviór
Nie do końca rozumiem co masz na myśli. Panel logowania mam jakby na środku strony, więc przeniesienie go przed <head> nie wchodzi w grę.

Przepraszam, że zadaję takie może głupie pytania.
phpion
Może ten przykład przybliży Ci moją koncepcję:
  1. <?php
  2. $akcja = $_REQUEST['akcja'];
  3.  
  4. switch ($akcja) {
  5. case 'logowanie':
  6. // kod odpowiedzialny za sprawdzenie logowania (w tym setcookie() jesli ok)
  7. $content = ($zalogowany) ? 'jestes zalogowany' : 'logowanie nieudane';
  8. break;
  9. case 'formularz_logowania':
  10. $content = '<form>...</form>';
  11. break;
  12. }
  13.  
  14. // dopiero teraz wysylamy kod strony
  15. ?>
  16. <html>
  17. <head>
  18. ...
  19. </head>
  20. <body>
  21. ...
  22. <?php echo $content; ?>
  23. ...
  24. </body>
  25. </html>
Wieviór
Ustawianie w ten sposób jest dobre, tylko panel logowania wciąż chcę zrobić niżej, to na pewno jakoś możliwe, właśnie myślę jak.

Dzięki, pokombinuję ;]

Teraz widzę
phpion
smile.gif
Pamiętaj, że do zmiennej $content możesz w każdej chwili dopisać cokolwiek poprzez operator .=
  1. <?php $content .= 'lalala';
  2. ?>

co spowoduje dopisanie tekstu 'lalala' na końcu zmiennej $content.
Wieviór
Wszystko jest pięknie, loguje się, cookie się ustawiają, tylko teraz jak wyłączę przeglądarkę i włączę znów, to owszem - sprawdzając w FireFoxie mam te wszystkie ciastka, tylko nie wiem jak się do nich odwołać z php, bo jak robię prostego:

  1. <?php
  2. if (isset ($_SESSION['login'])) { echo 'dobrze jest!'; }
  3. ?>


To niestety nic nie daje :/
b_chmura
na początku pliku wstaw ob_start(); od tej chwili do setcookie(); możesz odwołać się w każdym momencie pliku

EDIT:
Cytat(Wieviór @ 8.09.2007, 13:30:01 ) *
Wszystko jest pięknie, loguje się, cookie się ustawiają, tylko teraz jak wyłączę przeglądarkę i włączę znów, to owszem - sprawdzając w FireFoxie mam te wszystkie ciastka, tylko nie wiem jak się do nich odwołać z php, bo jak robię prostego:
  1. <?php if (isset ($_SESSION['login'])) { echo 'dobrze jest!'; }?>

To niestety nic nie daje :/



  1. <?php if (isset ($_COOKIE['login'])) { echo 'dobrze jest!'; }?>
Wieviór
No tak! Ale jestem głupi!!!

Dzięki wszystkim za pomoc biggrin.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.