freemp3
23.04.2009, 21:00:30
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.
może jakiś kawałek kodu?
wróżki wolne wzięły...
freemp3
23.04.2009, 21:33:28
index.php
<?php
if($_SESSION['log'] == "")
{
header("Location: adres_strony/login.php"); }
?>
login.php
<?php
$_SESSION['log'] == "1";
$_SESSION['nick'] == "$nick";
header("Location: adres_strony/index.php"); ?>
wyloguj.php
<?php
if(isset($_POST) && $_POST['wyloguj'] == "tak") {
$_SESSION['nick'] = "";
$_SESSION['log'] = "";
header("Location: adres_strony/index.php"); }
?>
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
23.04.2009, 21:48:00
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.
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
23.04.2009, 21:54:28
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
23.04.2009, 22:16:10
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
28.04.2009, 20:22:44
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
28.04.2009, 20:35:28
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
28.04.2009, 20:41:51
Z IE zawsze był problem (przynajmniej poniżej wersji 7.0, nie wiem jak wzwyż). Ja to obchodzilem javascriptem

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
28.04.2009, 20:42:25
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
freemp3
5.05.2009, 22:13:53
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_cmsTam 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.