Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne][PHP]Gubienie zmiennych sesyjnych, dwukrotne logowanie., Serwer gubi w specyficznych okolicznościach zmienne sesyjne.
Kvokul
post 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
Go to the top of the page
+Quote Post
Mega_88
post 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ę.
Go to the top of the page
+Quote Post
Kvokul
post 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?
Go to the top of the page
+Quote Post
ber32
post 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ł.


--------------------
Go to the top of the page
+Quote Post
Mega_88
post 11.10.2013, 20:27:56
Post #5





Grupa: Zarejestrowani
Postów: 360
Pomógł: 34
Dołączył: 20.08.2011

Ostrzeżenie: (0%)
-----


Cytat(Kvokul @ 11.10.2013, 18:59:34 ) *
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 smile.gif

To było pierwsze co mi przyszło to głowy nie jestem w 100% pewny, że to to, ale nie zaszkodzi sprawdzić.

Go to the top of the page
+Quote Post
wlodek_789
post 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

  1. <?php
  2.  
  3.  
  4. function message() {
  5. if (isset($_SESSION["message"])) {
  6. $output = "<div class=\"message\">";
  7. $output .= htmlentities($_SESSION["message"]);
  8. $output .= "</div>";
  9.  
  10. // clear message after use
  11. $_SESSION["message"] = null;
  12.  
  13. return $output;
  14. }
  15. }
  16.  
  17. function errors() {
  18. if (isset($_SESSION["errors"])) {
  19. $errors = $_SESSION["errors"];
  20.  
  21. // clear message after use
  22. $_SESSION["errors"] = null;
  23.  
  24. return $errors;
  25. }
  26. }
  27.  
  28. ?>
Go to the top of the page
+Quote Post
Kvokul
post 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.
Go to the top of the page
+Quote Post
buliq
post 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)


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
Go to the top of the page
+Quote Post
Kvokul
post 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ń wink.gif Ale dobrze, że przypomniałeś - przecież powód nie działania MUSI być oczywisty.

Podpowiedz mi co mogę zrobić z www przed nazwą serwera?


Go to the top of the page
+Quote Post
buliq
post 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


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
Go to the top of the page
+Quote Post
Kvokul
post 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.
Go to the top of the page
+Quote Post
buliq
post 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?


--------------------
KTOŚ TU PACZY???

Kompedium wiedzy
Go to the top of the page
+Quote Post
Kvokul
post 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 wink.gif

Dziękuję Ci bardzo.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 19:11