Newsgroup: it.comp.www.php
Titolo: 2 processi in una sessione

Da LongElab.php, tramite la funzione javascrip xmlHTTPRequest(), lancio 
Calcolo.php il quale fo opensession e crea $_SESSION["contatore"] che 
incrementa varie volte per tutta la sua durata che e' attorno ai 2 min.
Poiche la xmlHTTPRequest e' asincrona mi ritorna il controllo al 
Javascript di LongElab.php e io a questo punto apro in un iframe una 
pagina DisplayStato.php che fa opensession ed echo($_SESSION["contatore"]);
Mi trovo ad avere 2 processi PHP che intervengono sulla stessa 
variabile, uno in lettura e l'altro in scrittura.
Mi e' gia' crashato 2 volte il server.
Ho chiesto troppo a PHP?
Ciao
Marco

 Ho chiesto troppo a PHP?
IMHO non puo' essere la gestione delle sessioni ad averti "crashato" il
server, verifica di non avere loop infiniti e la percentuale di CPU
utilizzata da calcolo.php
-- 
I am what I am, I do what I can
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 
Era danneggiata una tabella di MySQL per cui aveva comportamenti 
imprevedibili. Capito questo (e ci sono volute ore) ho ripristinato il 
DB e tutto e' andato a posto.
Ma ecco l'amara scoperta: se dal lato client lancio 2 script che 
dovrebbero andare in parallelo, PHP sene frega! Viene eseguito il primo 
e solo al suo termine esegue il secondo. In pratica serializza le richieste.
Mi sembrava troppo bello poter aprire processi concorrenti.
Ciao
Marco

 concorrenti.
Come fai a dire che capita questo?
Prova questo codice dove inserisci $_SESSION['count']++
$_SESSION['count']++;
session_write_close ();
session_start ();


 session_start ();
Purtroppo non posso chiudere la sessione. L'elaborazione fa riferimento 
a molte variabili di quella sessione impostate da altri script.
Ma perche'? Cosa dovrebbe succedere ?
Dal basso del mio skill questa tua variante perde il contatto con 
l'altro script perche' passa ad una sessione diversa. O no?
Marco

 perche' passa ad una sessione diversa. O no?
No, il secondo session_start riapre sempre la stessa sessione.
IMHO la soluzione migliore per questo tipo di problematiche e'
l'utilizzo di un database o di un file di log. Nel DB potresti inserire
una semplice tabella di due campi, uno con il session_id ed uno con il
counter.
-- 
I am what I am, I do what I can


 counter.
Si forse e' vero, ma l'elaborazione gia' insiste parecchio sul DB e poi 
a orecchio una condivisione di una var in memoria mi sembra piu' veloce.
Grazie alla n
  con n = N. di dritte che mi hai gia' dato ;-)
Marco

 veloce.
Se sei sotto *nix e vuoi provare qualche cosa di nuovo (forse) dai una
occhiata a 
http://www.php.net/manual/en/ref.sem.php
-- 
I am what I am, I do what I can
Vuoi supportarmi? 
http://url.repository.biz/go/3E


Per caso mi sono accorto che l'header di LongElab.php, che arriva dopo 2 
minuti, contiene circa 200 righe come questa:
Set-Cookie: PHPSESSID=28a154377161305003e3e339061957f1;
A occhio ce n'e' una per ogni volta che ho chiuso e riaperto la sessione 
durante l'elab.
Come posso pulire il set-cookie?
Ciao
Marco

Ux wrote:

Prova con:
ini_set ('session.use_cookies', 0);
prima di ogni session_start ();
-- 
I am what I am, I do what I can
Vuoi supportarmi? 
http://url.repository.biz/go/3E


 
Works great!!!
Thnx
:-)
Marco