Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: IE nie do końca reaguje na funkcję header()
Forum PHP.pl > Forum > PHP
freemp3
Tak jak w temacie. Wiem, że ten temat był poruszany wielokrotnie, jednak problemu nie udało mi się rozwiązać.
Więc struktura kodu wygląda mniej więcej tak. Jest to skrypt logowania i wylogowywania.
Logowanie:
Po wejściu na stronę index.php skrypt sprawdza sesje. Jak jest pusta przekierowanie na login.php. Jak narazie ok. Po podaniu danych skrypt ma przeładować stronę i sprawdzić dane. Jak jest ok przekierowanie na index i tu jest zonk bo jest biała strona i dopiero po odświeżeniu przechodzi do index. W pasku adresu pozostaje dalej login.php

Wylogowani:
Po kliknięciu w wyloguj skrypt przechodzi na wyloguj.php po czym ma się przekierować na index.php, a ponieważ zmienne sesyjne są puste powinno znów przekierować na login. No i w tym momencie znowu zonk i biała strona. W pasku adresu jest index.php, czyli przez wyloguj przeleciał normalnie. Po odświeżeniu leci dalej.
osl
może jakiś kawałek kodu?
wróżki wolne wzięły...
freemp3
index.php
  1. <?php
  2. if($_SESSION['log'] == "")
  3. {
  4.    header("Location: adres_strony/login.php");
  5.    exit;
  6. }
  7. ?>


login.php
  1. <?php
  2. $_SESSION['log'] == "1";
  3. $_SESSION['nick'] == "$nick";
  4. header("Location: adres_strony/index.php");
  5.      exit;
  6. ?>

wyloguj.php
  1. <?php
  2. if(isset($_POST) && $_POST['wyloguj'] == "tak")
  3. {
  4. $_SESSION['nick'] = "";
  5. $_SESSION['log'] = "";
  6.    header("Location: adres_strony/index.php");
  7.        exit;
  8. }
  9. ?>
osl
zakładam, że robisz session_start()?
ten exit raczej nie jest potrzebny po header (Location)
poza tym przy wylogowaniu przydało by się session_destroy().

Które to IE?
W innych przegladarkach ok?
freemp3
Oczywiście, że jest session_start();

Dokładna wersja IE to 6.0.2900.2180.xpsp i coś tam dalej.
Na innych przeglądarkach śmiga aż miło.
osl
Nie bardzo widzę jakieś inne błędy w Twoim skrypcie, ale z IE nigdy nic nie wiadomo.
Pierwsze co mi sie nasuwa to że skrypt kończy pracę na exit, a przeglądarka nie dostała nowych nagłówków.
To bardzo naciągana teoria, jednakże z IE wszystko się może zdarzyć...
freemp3
To raczej odpada. Wcześniej było bez, a dodałem je bo myślałem, że może przez to. Pierwotna wersja zakładała return, ale zmian nie było więc dałem exit no i zmian też nie ma.
Zapewne to wina M$. Trzeba będzie to jakoś obejść. Sprawdzę jeszcze jutro w pracy jak się tam przeglądarka zachowuje.
l0ud
Cytat
ten exit raczej nie jest potrzebny po header (Location)


Jeżeli ten skrypt coś później wykonuje (i to coś nie jest zabezpieczone warunkiem), to musi. Dużo dziur powstaje z takiego przekonania.
freemp3
Hmm... Dziwna sprawa. W pracy IE normalnie przekierowuje, a żeby było śmieszniej to jest ta sama wersja.
Może to jakoś zależy od łącza internetowego? Ja mam w domu tylko 512k, a tutaj jest 6m.

Jeszcze jedno pytanie. Czy po funkcji header() można zrobić jakiś panel informacyjny coś w stylu: "Zostałeś zalogowany kliknij dalej"?
Chodzi mi o takie zabezpieczenie, żeby nie było białej strony jak ktoś będzie się logował i wylogowywał (co zapewne rzadko się będzie zdarzało, ale zawsze się może zdarzyć).

Zauważyłem coś ciekawego jak dziś testowałem jeszcze skrypt. Mianowicie, po przejściu na przykład na stronę konfiguracji i wylogowaniu strona się tak jak by przeładuje i jest biała (dalej na pliku konfiguracyjnym) mimo, że w form wyraźnie jest, że ma iść do pliku wyloguj.php
okitoki
nic po header("Location.... nie wypiszesz, ta funkcja od razu wysyła do przeglądarki kod 302 i nowy adres

poza tym tu błędu nie widać, błąd mogłeś usunąć modyfikując kod na potrzeby tego forum
lashus
Z IE zawsze był problem (przynajmniej poniżej wersji 7.0, nie wiem jak wzwyż). Ja to obchodzilem javascriptem tongue.gif Użyj:

Kod
<?php
if(isset($_POST) && $_POST['wyloguj'] == "tak")
{
$_SESSION['nick'] = "";
$_SESSION['log'] = "";
    echo '<script type="text/javascript>
        window.location="http://google.com";
    </script>';
       exit;
}
?>
okitoki
jeszcze widzę mały błąd, ten kod jest zakręcony

jak dajesz wyloguj to wysyła do index.php

index sprawdza że nie jesteś zalogowany to wysyła do login.php

login od razu cie loguje i znów lądujesz na index.php

czyli jednym słowem wyloguj według tego nie działa exclamation.gif
freemp3
Też nad tym myślałem, ale wyloguj działa poprawnie. W pliku wylogowania są czyszczone sesje. Poza tym na innych przeglądarkach działa ok, no i u mnie w pracy o dziwo na IE śmiga. Pewnie to zależy od prędkości łącza. Wczoraj jeszcze się nad tym pomęczyłem i doszedłem do wniosku, że zawala plik silnika. Skrypt pisałem na podstawie tego skryptu:
http://phpbluedragon.pl/index.php?id=linuxmag_cms
Tam jest dokładnie ten sam błąd. Mało tego, to zauważyłem, że jeśli jestem już zalogowany i jestem w pliku index.php i kliknę w logo (czyli odświeżę index.php) to też wywala mi białą stronę, tak samo jest także na tym cms-ie. Spróbuje jeszcze tego z java. Może to rozwiąże problem, a jeśli nie to trzeba będzie przebudować strukturę skryptu.

No i sprawa jest jasna. Z kolegą programistą doszliśmy do wniosku, że nawala serwer. Na innych kod działa ok, po przepuszczeniu przez debuggery też jest ok, więc chyba sprawa się wyjaśniła.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.