Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sesje, sleep() i blokowanie kolejnego połączenia
Forum PHP.pl > Forum > PHP
Prph
Witam!

Posiadam 2 pliki, w każdym startuje sesja. Jeżeli w dowolnym z plików zrobię sleep(10), to z kolejnym nie mogę się połączyć. Połączenie wisi do zakończenia sleep() i dopiero jest realizowane.

Sprawdzałem na różne sposoby i efekt ten sam przy sesjach. Jeżeli jeden z plików nie ma sesji, to połączenie jest realizowane natychmiast.

Do czego mi to? Załóżmy, że mam w pierwszym pliku while(flaga sesji == true) {zrob_cos(); sleep(10); }, a w drugim po prostu zmieniam flagę, żeby przerwać pętle w pierwszym. Może istnieje inny sposób na rozwiązanie tego problemu?
wookieb
http://forum.php.pl/index.php?showtopic=14...mp;#entry732218
Jak przeczytasz wszystko, dostaniesz odpowiedź smile.gif
zegarek84
dokładniej to sesja jest blokowana gdyż domyślnie sesja jest oparta na plikach... nie zapiszesz sesji puki pierwsza nie uwolni uchwytu... musiałbyś napisać własnego handlera sesji i najlepiej to oprzeć o bazę danych... a coby nie robić tak, że co odczyt zmiennej by nie łączyć się z bazą danych to lepiej w sesji zrób uchwyt do innej tabeli w bazie danych i zmiennej... w drugim pliku zmienisz wartość rekordu o danym id a w pierwszym co jakiś czas będziesz sprawdzał wartość ale bezpośrednio w bazie...

jeśli nie zrozumiałeś to co napisałem to prosty test - podepnij do zapisu [zablokuj dostęp] jakiś plik tekstowy i daj sleep na te 10s... w między czasie spróbuj innym zmienić zawartość pliku gdzie już pierwszy niby zaczął a nie skończył... efekt będzie taki jak teraz masz z sesją...
Prph
Zgadza się, to sesja jest blokowana i stąd problem.

Czy da się rozwiązać ten problem za pomocą sesji składowanych we współdzielonej pamięci? Włączałem memcache dla składowania sesji, ale efekt jest ten sam.

Idealne byłoby rozwiązanie:
  1.  
  2. echo 'dane';
  3. sleep(1);
  4.  


O ile write_close natychmiast zwalnia dostęp do sesji i można wykonać kolejne połączenie, sesja nie wstaje ponownie z powodu wysłanych danych przez nagłówkami.

Sesje są mi potrzebne (przynajmniej tak mi się teraz wydaje)...

EDIT: właśnie włączyłem handler zapisujący w bazie w Zend Framework i problem blokowania znika. Teraz wystarczy przeładować zawartość sesji.
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.