Проблемы с PHP при одновременных сеансах и AJAX - PullRequest
6 голосов
/ 28 января 2010

У меня есть класс обработчика сеанса, который вызывает session_write_close () в конце скрипта. Это гарантирует, что даже если выдается header () или exit (), данные сеанса сохраняются.

public function __destruct()
{
    session_write_close();
}

Однако я заметил, что для одной из моих страниц AJAX два обновления сеанса фиксируются уровнем базы данных.

Я предполагаю, что страница [1] загружается и отправляет [2] AJAX-запрос. Этот [2] AJAX-запрос должен начать сеанс до того, как страница [1] сможет вызвать session_write_close().

После того, как страница [2] AJAX загрузила сеанс, затем страница [1] наконец сохраняет сеанс, а затем вскоре после того, как запрос [2] AJAX сохраняет свой сеанс - который перезаписывает первый!

Это может выглядеть так:

[1] page loads session
[1] page sends output
[2] ajax loads session
[1] page saves session
[2] ajax sends output
[2] ajax saves session

Что мне делать, чтобы убедиться, что одна страница не загружает сеанс до того, как другой сможет сохранить сеанс?

1 Ответ

3 голосов
/ 28 января 2010

Предположение было неверным.

... данные сеанса заблокированы для предотвращения одновременная запись может только один скрипт работать на сессии в любое время http://us.php.net/session_write_close

Другими словами, вы могли бы одновременно выполнять 100 запросов AJAX для пользователя, каждый из которых ожидал своей очереди.

Моя проблема оказалась ошибкой при выборе правильного столбца таблицы сеансов, в результате чего мои сеансы воссоздались при каждой загрузке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...