Cześć,
Utworzyłem stronę wg własnego framework MVC, zgodnie ze sztuką z książki Marcina, mam jednak problem z czasem sesji. Strona w php 7.4 i IIS10
w index.php mam:
session_set_cookie_params(3600); session_start();
Po upływie godziny bez aktywności jak wchodzę np. na home/start to wyskakuje mi błąd
PHP Notice: Undefined index: user_data in ….
Natomiast w kontrolerze home dla start mam:
public function start(){ if(!isset($_SESSION['is_logged_in'])){ header('Location: '.ROOT_URL.'home'); } $this->returnView('start'); }
tablica user_data sesji jest wykorzystywana na stronie start, ale skoro sesja się skończyła to powinna zadziałać funkcja isset dla $_SESSION[‘is_logged_in’] i przejść do home, gdzie home to jest strona logowania bez żadnych zmiennych sesji.
Nie mam pomysłu dlaczego nie działa sprawdzenie tej zmiennej. Jakieś pomysły?
Dzięki Marcin, metoda prób i błędów przed twoja odpowiedzią doszedłem do tego ze przy dodaniu else działa prawidłowo i poprawiłem kod. Teraz działa jak należy.
jeszcze raz dziekuje
Hej Daniel,
samo wykonanie polecenia header nie spowoduje, że kod PHP przestanie się wykonywać i zostaniesz magicznie przeniesiony do nowej podstrony. Ta funkcja dodaje jedynie wpis do nagłówka zwracanej odpowiedzi przez serwer.
Obstawiam, że sprawdzenie wykonuje się poprawnie, a jedynie dalsza część kodu psuje Twoje zamiary.
To, co możesz zrobić, to wstawić metodę returnView w bloku else, wtedy widok zostanie zwrócony tylko wtedy, gdy zmienna faktycznie istnieje. Możesz też, zaraz po wywołaniu funkcji header, wstawić po prostu exit(); czyli zakończyć procesowanie dalszego kodu PHP. Wtedy rezultatem będzie pusta strona z nagłówkiem informującym o przekierowaniu na inną lokalizację.