Witam,
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
if (!defined('APP_DIR')) exit('Nie można wywołać skryptu');
//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
if (isset($_GET['page'])) $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 **************************
********
if (isset($_GET['logout'])) {
unset($_SESSION['ADMIN']); $info = 'Poprawnie wylogowano.';
}
//********************************* OBSŁUGA LOGOWANIA ****************************
********
if(isset($_POST['login'])&&isset
($_POST['pass'])) //sprawdzamy dane 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 ********************************
********
if(isset($_POST['SECID'])) {
$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?(IMG:
http://forum.php.pl/style_emoticons/default/questionmark.gif)