Mam bardzo dziwny problem z sesją w Internet Explorerze.
Mianowicie mam taki skrypt:
<?php //Zabezpieczenie przed bezpośrednim //odwołaniem się do skryptu //aplikacja/app.inc.php //Załadowanie pliku konfiguracyjnego include('define.inc.php'); //Załadowanie klas obiektów include(APP_DIR.'klasy/blad.klasa.inc.php'); //Błąd include(APP_DIR.'klasy/baza_danych.klasa.inc.php'); //Baza danych include(APP_DIR.'klasy/functions.klasa.inc.php'); //Klasa z funkcjami niezwiązanymi z obiektami include(APP_DIR.'klasy/sekcja.klasa.inc.php'); //Klasa z funkcjami niezwiązanymi z obiektami //Błąd aplikacji $error = null; $info = null; //zmienna rozpoznająca wybrane menu $page = $_GET['page']; else $page = null; //Nawiązanie połączenia z bazą danych if (!Blad::jestBledem($blad = Baza_danych::polaczZBazaDanych())) { //Rozpoczęcie sesji //tutaj wykonujemy obliczenia związane z ładowaniem stron //********************************* OBSŁUGA WYLOGOWANIA **************************
******** { $info = 'Poprawnie wylogowano.'; } //********************************* OBSŁUGA LOGOWANIA ****************************
******** { //$ret = User::sprawdzLogowanie($_POST['login'],$_POST['pass']); if(USER==$_POST['login'] && UPASSWD==$_POST['pass']) { $_SESSION['ADMIN'] = true; //poprawnie zalogowano - obliczenia związane z definicją środowiska po zalogowaniu }else { // niepoprawny login $error = 'Niepoprawny login lub hasło.'; } } //********************************* EDYCJA SEKCJI ********************************
******** { $Sekcja = Sekcja::getObjectById($_POST['SECID']); } //********************************* ŁADOWANIE DANYCH UŻYTKOWNIKA *****************
******** /*if(isset($_SESSION['ADMIN'])) { $uzytkownik = new User(User::getUserData($_SESSION['LOGIN'])); } else $uzytkownik = null;*/ //********************************** OBSŁUGA PODSTRON ****************************
********* switch ($page) { case 'home' : break; case 'login' : break; default : $page = 'home'; break; } //********************************************************************************
********* } else { //Błąd krytyczny - brak połączenia z bazą danych $error = $blad->_tresc; include(APP_DIR.'szablony/fatal.error.tpl.php'); } //Wyświetlenie layoutu include (APP_DIR.'szablony/index.tpl.php'); ?>
Wszystko idealnie działa w każdej innej przeglądarce. Jednak jak uruchamiam stronę na IE to po kliknięciu na niektóre linki na tej stronie strona się nie ładuje. Tzn.
Naciskam link. Pojawia się biały ekran w miejscu strony. Adres strony w IE się nie zmienia na nowy. Dopiero po kliknięciu na odśwież strona się ładuje.
Ja już rozkładam ręce, nie wiem gdzie szukać błędu. Problem znika jak wykomentuje linie z
Kod
session_start()
Na pweno nigdzie nie ma znaków które wysyłają się przed sesją. Nawet nie wiem jak dobrze określić co powoduje błąd i w którym miejscu.
Dla przykładu. Zdarzyło mi się taka sytuacja, gdzie zawartość strony jest ładowana z bazy danych. Załóżmy że szablon strony jest stały i ładujemy tylko treść na podstawie zmiennej
Kod
$_GET['page']
. Strona potrafi działać poprawnie dla wartości tej zmiennej np. 1 a dla wielu innych wartości występuje opisany powyżej błąd.Proszę o pomoc.
Śledząc dalej problem napotkałem na bardzo dziwne zachowanie. Okazuje się, że białe okno ukazujące się w przeglądarce IE jest wynikiem zatrzymania się parsowania HTML'a na lini z
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
Wczytywanie strony zatrzymuje się zawsze w tym miejscu. Jednak nie zawsze strona się zatrzymuje. Są podstrony dla których to działa , a dla innych powoduje zawieszenie się.
Może ktoś z Was ma pomysł co może być przyczyną.
W innych przeglądarkach jest ok.
Jeśli zmienie pozycję tego wpisu w sekcji HEAD to skrypt wykona się tylko do tego miejsca gdzie jest definicja kodowania znaków?
