[inne][PHP]Gubienie zmiennych sesyjnych, dwukrotne logowanie., Serwer gubi w specyficznych okolicznościach zmienne sesyjne. |
[inne][PHP]Gubienie zmiennych sesyjnych, dwukrotne logowanie., Serwer gubi w specyficznych okolicznościach zmienne sesyjne. |
11.10.2013, 15:10:26
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.10.2013 Ostrzeżenie: (0%) |
Witam. Pierwszy raz tutaj - proszę o odrobinę cierpliwości.
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; ?> 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ź. Ten post edytował Kvokul 11.10.2013, 15:16:35 |
|
|
11.10.2013, 15:34:02
Post
#2
|
|
Grupa: Zarejestrowani Postów: 360 Pomógł: 34 Dołączył: 20.08.2011 Ostrzeżenie: (0%) |
Cześć !
Nie wiem czy próbowałeś w ten sposób: jeżeli klient ma w firmie router z którym łączą się komputery to odłącz router i podłącz jeden komputer bezpośrednio do sieci pomijając router i sprawdź czy będzie gubić sesję. |
|
|
11.10.2013, 17:59:34
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.10.2013 Ostrzeżenie: (0%) |
Spróbuję przetestować, o ile będzie to możliwe. Dzięki za radę.
Jeżeli to zadziała, to co może mieć wpływ? |
|
|
11.10.2013, 18:59:40
Post
#4
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 22 Dołączył: 6.07.2010 Ostrzeżenie: (0%) |
Witam. Problem prawdopodobnie leży w samym przypisywaniu sesji . Ściągnij jakąś gotową klasę do obsługi sesji i poeksperymentuj czy problem też będzie się powtarzał.
-------------------- |
|
|
11.10.2013, 20:27:56
Post
#5
|
|
Grupa: Zarejestrowani Postów: 360 Pomógł: 34 Dołączył: 20.08.2011 Ostrzeżenie: (0%) |
Spróbuję przetestować, o ile będzie to możliwe. Dzięki za radę. Jeżeli to zadziała, to co może mieć wpływ? Jeżeli to się sprawdzi załatw inny router i go podłącz jak będzie działać wtedy jest przyczyna - router, podajesz nazwę routera i kombinujemy dalej To było pierwsze co mi przyszło to głowy nie jestem w 100% pewny, że to to, ale nie zaszkodzi sprawdzić. |
|
|
11.10.2013, 22:58:16
Post
#6
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 0 Dołączył: 18.09.2013 Ostrzeżenie: (0%) |
raczej problem sprzętu a jaki tam jest router? jaki switch?
sprawdz inną klasę sesji
|
|
|
17.10.2013, 11:34:01
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.10.2013 Ostrzeżenie: (0%) |
Wiadomość z dziś:
Problem pojawia się na większej ilości komputerów, nie tylko u jednej osoby stojących. W poniedziałek mogę przetestować jakieś konkretne rozwiązania, ale wciąż nie rozumiem, jak kod wykonywany po stronie serwera na jednych komputerach może działać a na innych nie działa. Dziękuję za podpowiedzi, przynajmniej wyeliminowano problemy sprzętowe, można się skupić na programowych. Przetestuję podpowiedziane rozwiązania. W poniedziałek będę mógł powiedzieć coś więcej. Uprośćmy pytanie, dlaczego tak prosty kod może nie działać? Witam ponownie. Znów więcej informacji, a problem robi się palący. Więc na pewno problem nie jest związany ze sprzętem, na niektórych komputerach się pojawia i tyle. Chwilę mi zajęło sprawdzanie różnych rzeczy i mam kilka dodatkowych pytań: 1. wlodek_789: w czym ma pomóc ten kod, który pokazałeś, ewentualnie jak mam go użyć i do czego? 2. ber32: czy mógłbyś mi coś konkretnego polecić? każda próba kończy się na razie tym, że wcześniej czy później następuje przekazanie $_SESSION na inną stronę i koniec zabawy. Może to kwestia konfiguracji? Nie mam pojęcia: czy ktoś mógłby podpowiedzieć coś na ten temat? Na razie żadne zastosowane rozwiązanie nie pomaga, a kwestia jest dramatyczna i grozi zerwaniem całego kontraktu. |
|
|
17.10.2013, 11:44:36
Post
#8
|
|
Grupa: Zarejestrowani Postów: 559 Pomógł: 93 Dołączył: 4.03.2008 Skąd: Olsztyn Ostrzeżenie: (0%) |
Rozumiem ze serwer stoi gdzieś poza firma, a oni odpalają tylko i wyłącznie gotową stronę WWW?
Zwróć uwagę na adres strony, www.xxx.pl nie musi się równać xxx.pl Może ustawienia cookies są pomieszane? Oczywiście nie muszę wspominać ze session_start musi być zawsze, wszędzie jako pierwsza instrukcja w pliku PHP, oraz że jeżeli dokonujesz przekierowania w skrypcie przy pomocy header, należy zakończyć działanie skryptu (exit;). Upewnij się też że nie ma nigdzie zapisu nadpisującego zawartość sesji (tego klucza) -------------------- |
|
|
17.10.2013, 12:04:38
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.10.2013 Ostrzeżenie: (0%) |
1. serwer jest gdzie indziej, komputery są gdzie indziej - w kilkunastu biurach na terenie województwa i poza.
2. www.xxx.pl, a xxx.pl - na pierwszy rzut oka, po przejściu wywala się całość. Czy to się da jakoś opanować na poziomie PHP, czy musi to być konfiguracja serwera? To może być ten problem, a nie zwróciłem na to uwagi. O ja głupi. Powiedz mi proszę co z tym zrobić? 3. Z uwagę na kilka różnych przyczyn nie ma tam ciasteczek, które mogłyby kolidować z sesjami. session_start - pamiętam, skrypt kończe exitem, o sesje dbam jak o niemowlaka i na 100% nie kasuję. Takie rzeczy sprawdzam przez ostatni miesiąc dzień w dzień Ale dobrze, że przypomniałeś - przecież powód nie działania MUSI być oczywisty. Podpowiedz mi co mogę zrobić z www przed nazwą serwera? |
|
|
17.10.2013, 12:16:02
Post
#10
|
|
Grupa: Zarejestrowani Postów: 559 Pomógł: 93 Dołączył: 4.03.2008 Skąd: Olsztyn Ostrzeżenie: (0%) |
Wymusić korzystanie z jednego adresu, czyli albo z www albo bez.
Opcji jest kilka, najlepiej zrobić to z htaccess, Ale są też opcje z PHP, np $_SERVER['HTTP_HOST']. Jedyny problem z PHP to taki ze ten HEADER może nie być wysłany ... czyli nie zadziała to tak jak powinno. Rozwiązanie z htaccess: np tutaj -------------------- |
|
|
17.10.2013, 13:26:27
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.10.2013 Ostrzeżenie: (0%) |
Dziś o 19 test rozwiązania przez zleceniodawcę. Na oko może to być to - rozwiązanie oczywiście w .htaccess zrobiłem.
Bardzo dziękuję za pomoc. Dam znać czy to do końca rozwiązało problem. |
|
|
18.10.2013, 07:41:31
Post
#12
|
|
Grupa: Zarejestrowani Postów: 559 Pomógł: 93 Dołączył: 4.03.2008 Skąd: Olsztyn Ostrzeżenie: (0%) |
I jak?
-------------------- |
|
|
18.10.2013, 08:19:07
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 11.10.2013 Ostrzeżenie: (0%) |
Jeszcze mają sprawdzać, czy na pewno działa, ale wstępnie rozwiązało to problem.
Wychodzi na to, że w swojej głupocie nie przewidziałem, że jak się komuś daje domenę, to on może sobie dodać www, albo nie dodawać. I rzeczywiście - u mnie działało, u innych nie Dziękuję Ci bardzo. |
|
|
Wersja Lo-Fi | Aktualny czas: 19.04.2024 - 16:35 |