Warum verursacht Session_Start eine Zeitüberschreitung, wenn ein Skript ein anderes Skript mit Curl aufruft?

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

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe zwei PHP -Skripte, die beide dieselbe Sitzung verwenden session_name('MySessID').

Wenn das erste Skript das zweite Skript mit Curl aufruft, hängt das zweite Skript an, wenn session_start() wird genannt.

Warum sollte das passiert?

War es hilfreich?

Lösung 2

I don't totally understand why this happens, but I got it solved.

This bug describes the same problem I'm having. I have a scripts posting to another script, both using the same session, which apparently stalls PHP.

So, before I do the whole curl post script, I call the session_commit function, so ending the calling scripts session, and enabling the called script to restart the session.

Whack...

Andere Tipps

Aus dem PHP -Handbuch

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

Sitzungsdaten werden normalerweise gespeichert, nachdem Ihr Skript beendet wurde, ohne dass Session_Write_Close () aufrufen muss. Da die Sitzungsdaten jedoch gesperrt sind, um gleichzeitige Schreibvorgänge zu verhindern, kann nur ein Skript jederzeit auf einer Sitzung betrieben werden. Wenn Sie Framesets zusammen mit Sitzungen verwenden, werden die Frames aufgrund dieser Sperre nacheinander laden. Sie können die Zeit verkürzen, um alle Frames zu laden, indem Sie die Sitzung beenden, sobald alle Änderungen an Sitzungsvariablen durchgeführt werden.

Sie können also keine 2 Skripte zur gleichen Zeit zur gleichen Zeit verwenden.

I got bitten by this as well. I fixed it thanks to the info provided in stackoverflow.

I had two pages, both had "session_start()" at the top and the first was calling the second with curl so I could POST variables to the second script after validation. The webserver was hanging until I added "session_write_close()".

Code sample follows:

// 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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top