Mały błąd - sesje

Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Mały błąd - sesje

Post przez tajger »

Dobra robota, ale tutaj też jest mały błąd.
Jeżeli podczas zalogowania odczekuje > 5 sekund i nie klikne nic i daje F5 to mnei wywala fo formularza (CZYLI JEST OK), ale jak powtórnie dam F5 to znów jestem zalogowany.

..a druga sprawa, która mi się rzuciła w oczy to:
Jeżeli odrazu podczas zalogowania klikne ODŚWIEŻ (link) przed 5 sekundami, to wiadomo jestem dalej zalogowany i teraz jak poczekam wiecej niz 5 sekund i dam F5 i to mnie wywala do formularza, czyli jest git, jeszcze raz daje F5 i dalej jest formularz, więc jest super.

Później jeszcze spróbuje coś porobić, ale generalnie to już dobrze jest dużo.
Jakby co to kod:

Code: Zaznacz cały

<?php
session_start();
?>

<!DOCTYPE html>
<head>      
        <meta charset="utf-8" >
         <title>Test</title>
</head>
<body>
    
<?php
    if (isset($_GET['akcja']) && $_GET['akcja'] == 'wyloguj')
    {
        $_SESSION['zalogowany'] = 0;
        session_destroy();
        echo "Zostałeś wylogowany";
    }
    
    $ignore_post_msg  = false;
    if ($_SESSION['zalogowany'] == 1 && time()-$_SESSION['czas'] > 5)
    {
        $_SESSION['zalogowany'] = 0;
        session_destroy();
        echo "Wylogowało cię.";
        $ignore_post_msg = true;
    }

    if (((isset($_POST['login']) && isset($_POST['haslo'])) || $_SESSION['zalogowany'] == 1) && !$ignore_post_msg)
    {
        if ((!empty($_POST['login']) && !empty($_POST['haslo'])) || $_SESSION['zalogowany'] == 1)
        {
            if ($_SESSION['zalogowany'] == 0)
            {
            $login = filter_var($_POST['login'], FILTER_SANITIZE_STRING);
            $haslo = filter_var($_POST['haslo'], FILTER_SANITIZE_STRING);
            }
        
            if ((($login == "lukasz") && ($haslo == "dzik123")) || $_SESSION['zalogowany'] == 1)
            {
                if ($_SESSION['zalogowany'] == 0)
                    $_SESSION['login'] = $login;
                
                echo "Zalogowany jako: <b>".$_SESSION['login']."</b><br />";
                echo "<br />";
                echo "PROFIL UŻYTKOWNIKA<br />";
                echo "PRYWATNOŚĆ<br />";
                echo "PREFERENCJE<br />";
                echo "<a href='test.php'>Odśwież</a><br />";
                echo "<a href='?akcja=wyloguj'>Wyloguj się</a>";
                $_SESSION['zalogowany'] = 1;
                $_SESSION['czas'] = time();
            }
            else
            {
                echo "Błędny login lub hasło.<br />";
                echo "<a href='test.php'>Odśwież</a><br />";
                echo "<a href='test.php'>Zaloguj się ponownie</a><br />";
            }
        }
        else
        {
            echo "Login lub hasło nie zostało wpisane.<br />";
            echo "<a href='test.php'>Zaloguj się ponownie</a><br />";
        }
    }
    else
    {
?>
<form action="test.php" method="post">
        <div>Login: <input type="text" name="login" value="lukasz" size="10" maxlength="10" /></div>
        <div>Hasło: <input type="password" name="haslo" value="dzik123" size="10" maxlength="10" /></div>
        <div> <input type="submit" value="Login" /></div>
</form>
    <?php
    }
    ?>
</body>
</html>
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Mały błąd - sesje

Post przez Morfidon »

No to znaczy, że trzeba jeszcze wyzerować stan
$ignore_post_msg, czyli ustawić na fałsz po zalogowaniu...
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Mały błąd - sesje

Post przez tajger »

30 minut nad tym siedziałem i nic mi nie wychodzi, za mało chyba jeszcze rozumiem takie rzeczy
Zawsze walcz do końca i nigdy się nie poddawaj!
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Mały błąd - sesje

Post przez tajger »

Jeszcze raz do tych sesji wróciłem, żeby spróbować poprawić tę lukę, ale wyzerowanie stanu w $ignore_post_msg tuż po:
if ((($login == "lukasz") && ($haslo == "dzik123")) || $_SESSION['zalogowany'] == 1)
..nic nie daje.

Jak dotąd wszystko rozumiałem, ale ta kwestia odświeżania trochę mi zagmatwała w głowie i ta zmienan $ignore_post_msg, której troszkę nie rozumiem.
Zawsze walcz do końca i nigdy się nie poddawaj!
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Mały błąd - sesje

Post przez tajger »

Jeśli mógłby mi Pan pomóc jeszcze raz w tym wątku, ponieważ nie mogę rozwiązać tego problemu nie wiem jak to wyzerować bo i tak mi się to nie udaję, nie moge tego ignorowania totalnie zrozumieć a ponadto po tym czystym F5 co klikam jestem dalej zalgoowany, jak wspomniałem wyżej. Teraz robię stronkę i właśnie przez to już mam pierwszy błąd mysql-query. Bardzo mo zależy żeby to usunąć.
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Mały błąd - sesje

Post przez Morfidon »

Jeśli zablokujesz to coś to osoba, która się wyloguje normalnie też nie będzie mogła się zalogować. Po co w ogóle chcesz to zrobić? Przecież to jest programowo zrobione, aby po naciśnięciu F5 wysłało ponownie to co było w $_POST ?
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Mały błąd - sesje

Post przez tajger »

Szczerze można zwariować, bo tak naprawdę to jest cholerna luka, którą można wykorzystać. Mam serwer na linuxie i usunąłęm dzisiaj tę zmienną $ignore_post_msg. I wszystko chodzi OK jak powinno. Dlaczego na serwerze vertrigo na XP jest calłkiem inaczej a tutaj na linuksie u hosta działa. Pewnie po prostu ustawienia serwera są jakoś pozmieniane. Bo tak jak mówiłem już Panu o tym odświeżaniu po czasie po skończonej sesji się wszystko chrzaniło. Straciłem tylko czas na to, ale widocznie ustawienia serwera Vertrigo na XP muszę mieć pozmieniane na opcjach dotyczących tego odświeżania albo przesyłania powtórnie POSTA po sesji. Coś w tym musi być bo na netmarku.pl na linuksie mam wszystko OK. Jeszcze raz dzięki za pomoc oraz za podpowiedź w jednym z video o netmark.pl. Podczas chęci wykupienia serwera odwiedziłem sporo hostingów, i netmark.pl wraz z porównywalnością średniej (jakość/cena) wyszło mi wysoko. Tak więc wielkie dzięki. Co raz więcej nowych rzeczy poznaję dzięki Panu, i naprawdę opłaca się kupić te videokursy i je cały czas praktykować, bo to wychodzi w praniu potem, a mało gdzie znajdzie się takie videokursy. Jak na razie to stoję na drodzę wykupienia koljnego kursu jak zakończę wcześniejszy. Straszny offtop się zrobił. Wracam do kodu. :D
Zawsze walcz do końca i nigdy się nie poddawaj!
Post Reply