Pourquoi session_start provoque-t-il un dépassement de délai lorsqu'un script appelle un autre script à l'aide de curl
Question
J'ai deux scripts PHP, tous deux utilisant la même session en appelant nom_session ('MySessID')
.
Lorsque le premier script appelle le second script à l'aide de curl, le second script se bloque lorsque session_start ()
est appelé.
Pourquoi cela se produirait-il?
La solution 2
Je ne comprends pas très bien pourquoi cela se produit, mais je l'ai résolu.
Ce bogue décrit le même problème que je rencontre. J'ai un script publié sur un autre script, en utilisant la même session , qui bloque apparemment PHP.
Donc, avant de faire tout le script de publication curl, j'appelle la fonction session_commit
, mettant ainsi fin à la session de scripts d'appel et permettant au script appelé de redémarrer la session.
Whack ...
Autres conseils
À partir du manuel php
http://php.net/manual/en/function. session-write-close.php
Les données de session sont généralement stockées une fois votre script terminé sans qu'il soit nécessaire d'appeler session_write_close (), , mais les données de session étant verrouillées pour empêcher les écritures simultanées, un seul script peut fonctionner à tout moment sur une session . Lorsque vous utilisez des jeux de cadres avec des sessions, vous constaterez que les cadres se chargent un par un en raison de ce verrouillage. Vous pouvez réduire le temps nécessaire au chargement de tous les cadres en mettant fin à la session dès que toutes les modifications des variables de session sont effectuées.
Donc, vous ne pouvez pas avoir 2 scripts qui utilisent la même session à la même heure.
Je me suis aussi fait piquer par cela. Je l'ai corrigé grâce aux informations fournies dans stackoverflow.
J'avais deux pages, toutes les deux "" session_start ()" en haut et le premier appelait le second avec curl pour que je puisse poster des variables sur le second script après validation. Le serveur Web était suspendu jusqu'à ce que j'ajoute " session_write_close () ".
L'échantillon de code suit:
// 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 = Je me suis aussi fait piquer par cela. Je l'ai corrigé grâce aux informations fournies dans stackoverflow.
J'avais deux pages, toutes les deux "" session_start ()" en haut et le premier appelait le second avec curl pour que je puisse poster des variables sur le second script après validation. Le serveur Web était suspendu jusqu'à ce que j'ajoute " session_write_close () ".
L'échantillon de code suit:
<*>SERVER['HTTP_HOST'];
$uri = rtrim(dirname( Je me suis aussi fait piquer par cela. Je l'ai corrigé grâce aux informations fournies dans stackoverflow.
J'avais deux pages, toutes les deux "" session_start ()" en haut et le premier appelait le second avec curl pour que je puisse poster des variables sur le second script après validation. Le serveur Web était suspendu jusqu'à ce que j'ajoute " session_write_close () ".
L'échantillon de code suit:
<*>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( Je me suis aussi fait piquer par cela. Je l'ai corrigé grâce aux informations fournies dans stackoverflow.
J'avais deux pages, toutes les deux "" session_start ()" en haut et le premier appelait le second avec curl pour que je puisse poster des variables sur le second script après validation. Le serveur Web était suspendu jusqu'à ce que j'ajoute " session_write_close () ".
L'échantillon de code suit:
<*>REQUEST, '', "&"));//append parameters
curl_exec($ch); // results will be outputted to the browser directly
curl_close($ch);
exit();