Por que session_start causa um tempo limite quando um script chama outro script usando curl

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Tenho dois scripts PHP, ambos usando a mesma sessão chamando session_name('MySessID').

Quando o primeiro script chama o segundo script usando curl, o segundo script trava quando session_start() é chamado.

Por que isso aconteceu?

Foi útil?

Solução 2

Não entendo totalmente por que isso acontece, mas eu resolvi.

este incomodar descreve o mesmo problema que estou tendo. Eu tenho um script postando para outro script, ambos usando a mesma sessão, que aparentemente paralisou o PHP.

Então, antes de fazer todo o script de pós -curl, eu chamo o session_commit Função, encerrando a sessão de scripts de chamada e permitindo o script chamado para reiniciar a sessão.

Whack ...

Outras dicas

Do manual do php

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

Os dados da sessão geralmente são armazenados após o término do seu script, sem a necessidade de chamar session_write_close(), mas como os dados da sessão são bloqueados para evitar gravações simultâneas, apenas um script pode operar em uma sessão a qualquer momento.Ao usar conjuntos de quadros junto com sessões, você verá os quadros sendo carregados um por um devido a esse bloqueio.Você pode reduzir o tempo necessário para carregar todos os quadros encerrando a sessão assim que todas as alterações nas variáveis ​​da sessão forem feitas.

Portanto, você não pode ter 2 scripts usando a mesma sessão ao mesmo tempo.

Eu fui mordido por isso também.Consertei graças às informações fornecidas no stackoverflow.

Eu tinha duas páginas, ambas tinham "session_start()" no topo e a primeira chamava a segunda com curl para que eu pudesse POST variáveis ​​para o segundo script após a validação.O servidor web estava travado até que eu adicionei "session_write_close ()".

Exemplo de código a seguir:

// 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 = $_SERVER['HTTP_HOST'];
$uri  = rtrim(dirname($_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($_REQUEST, '', "&"));//append parameters    

curl_exec($ch); // results will be outputted to the browser directly
curl_close($ch);
exit();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top