Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> blokująca sesja
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Michael2318
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

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


@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 (IMG:style_emoticons/default/wink.gif)

Ten post edytował Michael2318 7.05.2013, 08:08:22
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
rocktech.pl
post
Post #4





Grupa: Zarejestrowani
Postów: 587
Pomógł: 131
Dołączył: 8.02.2010

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


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ą ...


Ten post edytował rocktech.pl 7.05.2013, 09:27:39
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 12:37