Mam problem, od dłuższego czasu zaangażowany jestem w tworzenie sporego serwisu, zawierającego wiele elementów, połączenie z aplikacjami po stronie klienta itd. I pojawił mi się banalny na pierwszy rzut oka problem, z którym walczę od ponad miesiąca.
Problem wygląda tak:
Mój klient próbuje się zalogować do systemu, system pozwala mu na to, potem po przejściu na inną stronę gubi zmienne sesyjne, a przy drugim logowaniu nie ma żadnego problemu i wszystko działa. Problem występuje na kilkunastu komputerach tego klienta, stojących w różnych podsieciach, ale TYLKO na jego komputerach. Testowałem to na kilkunastu, może kilkudziesięciu innych maszynach i wszytko działa poprawnie.
By było śmieszniej, testowo postawiłem serwer u innego dostawcy, na nim testową aplikację, opierającą się na tym samym mechanizmie logowania i znów - wszędzie działa, u niego nie.
By ułatwić znalezienie potencjalnego błędu zrobiłem sobie skrypt testowy, który u klienta nie działa:
Plik logowanie_test.php:
CODE
<?php session_start(); error_reporting(E_ALL);
echo '<!DOCTYPE html>';
echo '<head>';
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
if (isset($_POST['pr_mail'])) {
$_SESSION['ID_pracownika'] = 10;
$ID = $_SESSION['ID_pracownika'];
echo '<br>$_SESSION[ID_pracownika]: '.$ID ;
echo '<br>session_ID: '.session_id() ;
echo '<meta http-equiv="refresh" content="10;URL=http://mojehr.pl/logowanie_test2.php">';
exit();
}
?>
<form action="logowanie_test.php" method="post" enctype="multipart/form-data" name="logform" >
Wpisz cokolwiek i wcisnij przycisk
<input name="pr_mail" type="text" maxlength="64" >
<input class="input_submit" name="Submit" type="submit" value="Zaloguj" />
</form>
</body>
</html>
Plik logowanie_test2.php:
CODE
<?php session_start(); error_reporting(E_ALL);
$ID = $_SESSION['ID_pracownika'];
echo '<br>$_SESSION[ID_pracownika]: '.$ID ;
echo '<br>session_ID: '.session_id() ;
exit;
?>
$ID = $_SESSION['ID_pracownika'];
echo '<br>$_SESSION[ID_pracownika]: '.$ID ;
echo '<br>session_ID: '.session_id() ;
exit;
?>
Echa pokazują ID sesji oraz wartość zmiennej, gdy następuje przeskok do drugiego pliku, sesja jest gubiona i kasowana jest zmienna $_SESSION['ID_pracownika'].
Podkreślam, że błąd pojawia się tylko na określonej grupie komputerów, niezależnie od przeglądarki, konsekwentnie i za każdym razem, za każdym razem też, druga próba logowania jest poprawna. Komputery mają WindowsXP i Windows7. Co więcej - błąd nie pojawia się na innych komputerach podpiętych do tych podsieci, na których pracuje firma. Dodam, że na komputerach mojego klienta bez problemu chodzą inne strony i problem ten nie pojawia się gdzie indziej.
Wersja serwera: 5.4.15, jeżeli potrzebna jest jakaś informacja z phpinfo(); mogę je dostarczyć w każdej chwili.
Teraz pytanie:
Co może powodować taki błąd?
Czy mogę go w jakiś sposób poprawić lub ominąć?
Czy może być to problem po stronie konfiguracji klienta, a jeżeli tak, to w jaki sposób mogę go wskazać?
Pozdrawiam i z góry dziękuję za odpowiedź.