Strona 1 z 2
Mały błąd - sesje
Napisane: poniedziałek, 16 lipca 2012, 14:22
przez tajger
Znalazłem pewnie problem dotyczący sesji.
Czas wygaśnięcia sesji ustawiłem na > 5 sekund.

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ć?
Re: Mały błąd - sesje
Napisane: poniedziałek, 16 lipca 2012, 14:27
przez Morfidon
Pokaż kod...
Re: Mały błąd - sesje
Napisane: poniedziałek, 16 lipca 2012, 14:45
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>
Re: Mały błąd - sesje
Napisane: poniedziałek, 16 lipca 2012, 14:48
przez Morfidon
Ile sekund czekasz przed naciśnięciem F5??
Re: Mały błąd - sesje
Napisane: poniedziałek, 16 lipca 2012, 14:53
przez tajger
około 7-8 żeby minął czas >5
Re: Mały błąd - sesje
Napisane: poniedziałek, 16 lipca 2012, 15:15
przez Morfidon
dzieje się tak pewnie dlatego, że klikająć f5 ponownie wysyłane są poprawne dane przy pomocy $_POST.
Re: Mały błąd - sesje
Napisane: poniedziałek, 16 lipca 2012, 15:16
przez tajger
Generalnie to jest tak samo napisane jak u ciebie w videokursie. Zastanawiam się jak to obejść..
Re: Mały błąd - sesje
Napisane: poniedziałek, 16 lipca 2012, 19:46
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ę.
Re: Mały błąd - sesje
Napisane: wtorek, 17 lipca 2012, 11:42
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 ;/
Re: Mały błąd - sesje
Napisane: środa, 18 lipca 2012, 15:04
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 )