Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: blokująca sesja
Forum PHP.pl > Forum > PHP
nospor
Mam taki kod:
  1. //tutaj coś robie
  2.  
  3. //a teraz będą długie obliczenia, które będą trwały powiedzmy 30 sekund
  4. sleep(30);
  5. }

No i jest pewien problem - taki skrypt zablokuje mi sesje na 30 sekund, a co za tym idzie inne rządania z tej sesji będą również blokowane.

By uniknąć tego problemu, wystarczy dodać session_write_close
  1. //tutaj coś robie
  2.  
  3. //a teraz będą długie obliczenia, które będą trwały powiedzmy 30 sekund
  4. sleep(30);
  5. }

I już sesja mi nie będzie blokowana. No ale pojawia się kolejny problem, gdyż po tych 30 sekundach chciałbym znowu coś dopisać do sesji
  1. //tutaj coś robie
  2.  
  3. //a teraz będą długie obliczenia, które będą trwały powiedzmy 30 sekund
  4. sleep(30);
  5.  
  6. $_SESSION['cos tam'] = 'to się do sesji nie zapisze';
  7. }

Jednak do sesji już się nic nie zapisze.

Jedyne rozwiązanie jakie mi przychodzi do głowy to ponownie wystartować sesję
  1. //tutaj coś robie
  2.  
  3. //a teraz będą długie obliczenia, które będą trwały powiedzmy 30 sekund
  4. sleep(30);
  5.  
  6. $_SESSION['cos tam'] = 'to się już zapisze';
  7. }

Ale bardzo to rozwiązanie mi się nie podoba. Czy jest jakieś inne czy może to ponowne startowanie sesji w tym samym skrypcie jest ok?
Michael2318
@nospor, czemu takie rozwiązanie Ci nie odpowiada? Spójrz w manual: http://www.php.net/manual/pl/function.session-start.php:
Cytat
session_start() tworzy sesję lub wznawia bieżącą (...)

Po drugie, spójrz tam na przykład: http://www.php.net/manual/pl/function.sess...tart.php#110649
tam też jest zastosowane session_start() dwa razy wink.gif
nospor
To że wznawia bieżącą to ja wiem... jakby nie wznawiał to by przecież mechanizm sesji do niczego nie służył...
Jednak nigdzie nie piszą że można swobodnie używać kilka razy session_start w jednym żądaniu. A to że ktoś gdzieś w komentarzach napisał, że tak robi to w żaden sposób nie zmienia mojego zdania, że mi to się nie podoba. Jak pisałem sam widzę jedynie takie rozwiązanie, ale to mi się nie podoba smile.gif
rocktech.pl
Witam.

Też walczyłem kiedyś z tym problemem. Rozwiązanie to własna implementacja mechanizmu sesji.

Rozwiązanie z session_start() jest jak najbardziej poprawne.

Cytat
session_start() creates a session or resumes the current one ...


Czyli:

Cytat
session_start() tworzy nową sesję albo wznawia istniejącą ...
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.