Почему session_start вызывает тайм-аут, когда один скрипт вызывает другой скрипт, используя curl
Вопрос
У меня есть два PHP-скрипта, оба используют один и тот же сеанс, вызывая session_name('MySessID')
.
Когда первый скрипт вызывает второй скрипт с помощью curl, второй скрипт зависает, когда session_start()
называется.
Почему это могло произойти?
Решение 2
Я не совсем понимаю, почему это происходит, но я решил проблему.
Это ошибка описывает ту же проблему, что и у меня.У меня есть публикация скрипта в другой скрипт, оба используют один и тот же сеанс, что, по-видимому, останавливает PHP.
Итак, прежде чем я выполню весь скрипт curl post, я вызываю session_commit
функция, таким образом завершающая сеанс вызывающих скриптов и позволяющая вызываемому скрипту перезапустить сеанс.
Удар...
Другие советы
Из руководства по php
http://php.net/manual/en/function. сеанса записи close.php р>
Данные сеанса обычно сохраняются после того, как ваш сценарий завершается без необходимости вызывать session_write_close (), , но поскольку данные сеанса заблокированы для предотвращения одновременной записи, только один сценарий может работать с сеансом в любой момент времени . При использовании наборов кадров вместе с сессиями вы будете испытывать загрузку кадров один за другим из-за этой блокировки. Вы можете сократить время, необходимое для загрузки всех кадров, завершив сеанс, как только все изменения переменных сеанса будут выполнены. Р>
Таким образом, нельзя, чтобы два сценария использовали один и тот же сеанс одновременно.
Меня это тоже укусило. Я исправил это благодаря информации, предоставленной в stackoverflow.
У меня было две страницы, на обеих из них была " session_start () " вверху и первый вызывал второй с curl, чтобы я мог POST переменные для второго скрипта после проверки. Веб-сервер зависал, пока я не добавил " session_write_close () ".
Пример кода следующий:
// 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 = Меня это тоже укусило. Я исправил это благодаря информации, предоставленной в stackoverflow.
У меня было две страницы, на обеих из них была " session_start () " вверху и первый вызывал второй с curl, чтобы я мог POST переменные для второго скрипта после проверки. Веб-сервер зависал, пока я не добавил " session_write_close () ".
Пример кода следующий:
<*>SERVER['HTTP_HOST'];
$uri = rtrim(dirname( Меня это тоже укусило. Я исправил это благодаря информации, предоставленной в stackoverflow.
У меня было две страницы, на обеих из них была " session_start () " вверху и первый вызывал второй с curl, чтобы я мог POST переменные для второго скрипта после проверки. Веб-сервер зависал, пока я не добавил " session_write_close () ".
Пример кода следующий:
<*>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( Меня это тоже укусило. Я исправил это благодаря информации, предоставленной в stackoverflow.
У меня было две страницы, на обеих из них была " session_start () " вверху и первый вызывал второй с curl, чтобы я мог POST переменные для второго скрипта после проверки. Веб-сервер зависал, пока я не добавил " session_write_close () ".
Пример кода следующий:
<*>REQUEST, '', "&"));//append parameters
curl_exec($ch); // results will be outputted to the browser directly
curl_close($ch);
exit();