Perché session_start provoca un timeout quando uno script chiama un altro script usando curl

StackOverflow https://stackoverflow.com/questions/252907

  •  05-07-2019
  •  | 
  •  

Domanda

Ho due script PHP, entrambi usano la stessa sessione chiamando session_name ('MySessID') .

Quando il primo script chiama il secondo script usando curl, il secondo script si blocca quando viene chiamato session_start () .

Perché questo sarebbe successo?

È stato utile?

Soluzione 2

Non capisco perfettamente perché questo accada, ma l'ho risolto.

Questo bug descrive lo stesso problema che sto riscontrando. Ho uno script che pubblica su un altro script, entrambi usando la stessa sessione , che apparentemente blocca PHP.

Quindi, prima di eseguire l'intero script di post curl, chiamo la funzione session_commit , terminando così la sessione di script chiamanti e abilitando lo script chiamato a riavviare la sessione.

Whack ...

Altri suggerimenti

Dal manuale di php

http://php.net/manual/en/function. session-write-close.php

I dati di sessione vengono generalmente archiviati dopo la chiusura dello script senza la necessità di chiamare session_write_close (), ma poiché i dati di sessione sono bloccati per impedire scritture simultanee, solo uno script può operare su una sessione in qualsiasi momento . Quando si utilizzano i set di frame insieme alle sessioni, i frame si caricheranno uno alla volta a causa di questo blocco. È possibile ridurre il tempo necessario per caricare tutti i frame terminando la sessione non appena vengono apportate tutte le modifiche alle variabili di sessione.

Quindi non puoi avere 2 script che usano la stessa sessione contemporaneamente.

Anche io mi sono morso. L'ho risolto grazie alle informazioni fornite in StackOverflow.

Avevo due pagine, entrambe avevano " session_start () " nella parte superiore e il primo chiamava il secondo con arricciatura, in modo da poter postare le variabili sul secondo script dopo la convalida. Il server web è stato sospeso fino a quando non ho aggiunto " session_write_close () " ;.

Segue un esempio di codice:

// IMPORTANT (OR ELSE INFINITE LOOP) - close current sessions or the next page will wait FOREVER for a write lock.
session_write_close();

// We can't use GET because we can't display the password in the URL.
$host = 

Anche io mi sono morso. L'ho risolto grazie alle informazioni fornite in StackOverflow.

Avevo due pagine, entrambe avevano " session_start () " nella parte superiore e il primo chiamava il secondo con arricciatura, in modo da poter postare le variabili sul secondo script dopo la convalida. Il server web è stato sospeso fino a quando non ho aggiunto " session_write_close () " ;.

Segue un esempio di codice:

<*>SERVER['HTTP_HOST']; $uri = rtrim(dirname(

Anche io mi sono morso. L'ho risolto grazie alle informazioni fornite in StackOverflow.

Avevo due pagine, entrambe avevano " session_start () " nella parte superiore e il primo chiamava il secondo con arricciatura, in modo da poter postare le variabili sul secondo script dopo la convalida. Il server web è stato sospeso fino a quando non ho aggiunto " session_write_close () " ;.

Segue un esempio di codice:

<*>SERVER['PHP_SELF']), '/\\'); $url = "http://$host$uri/formPage2.php?"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); //append URL curl_setopt($ch, CURLOPT_POST,TRUE);//We are using method POST curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(

Anche io mi sono morso. L'ho risolto grazie alle informazioni fornite in StackOverflow.

Avevo due pagine, entrambe avevano " session_start () " nella parte superiore e il primo chiamava il secondo con arricciatura, in modo da poter postare le variabili sul secondo script dopo la convalida. Il server web è stato sospeso fino a quando non ho aggiunto " session_write_close () " ;.

Segue un esempio di codice:

<*>REQUEST, '', "&"));//append parameters curl_exec($ch); // results will be outputted to the browser directly curl_close($ch); exit();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top