Почему session_start вызывает тайм-аут, когда один скрипт вызывает другой скрипт, используя curl

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

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть два 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top