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:

Mały błąd - sesje

Post przez tajger »

Znalazłem pewnie problem dotyczący sesji.
Czas wygaśnięcia sesji ustawiłem na > 5 sekund.
Obrazek
1. Loguję się jako lukasz,
2. Klikam F5 i tu się tera robi coś dziwnego. Powinno wyrzucić mnie do czystego formularza z konukatem wylogowało cie.
3. Daję jeszcze raz F5. Wygląda na to jakbym był dalej zalogowany, ale nie jestem.
4. Odśwież wyrzuci mnie do Wylogowało cię i do formularza.

Ktoś mógły np. sobie stronkę odświeżyć F5 niż kliknąć w link Odśwież. Jak pominąć ten błąd? Jakiś if pewnie. Wiesz jak to naprawić?
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 »

Pokaż kod...
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 »

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";
    }
    
    if ($_SESSION['zalogowany'] == 1 && time()-$_SESSION['czas'] > 5)
    {
        $_SESSION['zalogowany'] = 0;
        session_destroy();
        echo "Wylogowało cię.";
    }

    if ((isset($_POST['login']) && isset($_POST['haslo'])) || $_SESSION['zalogowany'] == 1)
    {
        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 »

Ile sekund czekasz przed naciśnięciem F5??
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 »

około 7-8 żeby minął czas >5
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 »

dzieje się tak pewnie dlatego, że klikająć f5 ponownie wysyłane są poprawne dane przy pomocy $_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 »

Generalnie to jest tak samo napisane jak u ciebie w videokursie. Zastanawiam się jak to obejść..
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 »

Możesz np. wywoływać warunek tylko wtedy jeśli kogoś nie wylogowało. Czyli jeśli został ktoś właśnie wylogowany to nie wykonuj warunku, wystarczy stworzyć dodatkową flagę.
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 »

Próbowałem na różne sposoby i coś mi nie wychodzi. Problem ejst z tym F5, żeby przerzucało mnie do indexu ponownei do tych formularzy. Shit ;/
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 »

Code: Zaznacz cały

   
$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;
    }

Code: Zaznacz cały

if (((isset($_POST['login']) && isset($_POST['haslo'])) || $_SESSION['zalogowany'] == 1) && !$ignore_post_msg )
Post Reply