Сценарий:
Все страницы сайта xyz.com используют сеансы, чтобы проверить, вошел ли я в систему, и отобразить настроенный контент. Я вошел на xyz.com с помощью Firefox на моем iMac. Теперь, когда я пытаюсь посетить, xyz.com/page1.php и xyz.com/page2.php одновременно, пока страница 1 не загрузит страницу 2, не будет обработана.
Примеры кода
xyz.com / содержит (ссылки):
/* session check code here */
<a href="http://xyz.com/page1.php" rel="nofollow noreferrer">Page1</a>
<a href="http://xyz.com/page2.php" rel="nofollow noreferrer">Page2</a>
xyz.com / page1.php содержит:
/* session check code here */
echo "Hello";
flush();
sleep(5);
echo "done";
xyz.com / page2.php содержит:
/* session check code here */
echo "Second Page";
/* {insert code} to log time() to log.txt */
Тестирование
Вот что я делаю. Я вхожу в оболочку и поддерживаю выполнение этой команды:
user@xyz.com [~/public_html]# tail -f log.txt
В моем браузере (Firefox) (на xyz.com) я открываю несколько экземпляров page1 и page2 на вкладках. Если вы видите, страница1 будет загружаться не менее 5 секунд. Теперь, пока страница 1 не загрузится, запрос к странице 2 находится на рассмотрении. Это совсем не обрабатывается. Откуда я это знаю? Код в конце страницы2 регистрирует время доступа к файлу, который я отслеживаю. Давайте рассмотрим следующий случай:
Запросы отправлены (по порядку)
1. page1.php
2. page2.php
3. page2.php
4. page1.php
5. page1.php
6. page2.php
Результат (приблизительно)
1237961919 <- # 2 <BR>
1237961920 <- # 3 <BR>
1237961931 <- # 6 <BR>
Что ожидалось (приблизительно)
1237961915 <- # 2 <BR>
1237961915 <- # 3 <BR>
1237961915 <- # 6 <BR>
^ Предполагая, что все вызовы были выполнены одновременно
Наблюдение
Пока звонки обрабатываются, я, очевидно, не могу посетить xyz.com (это еще один запрос). Однако, если я открою его в другом браузере (Safari), он будет работать хорошо. Это потому что это очередной сеанс?
Возможные причины
На сервере есть защита?
Я больше программист, но если кто-то может дать указатели, я могу проверить сервер (VPS), чтобы убедиться, что apache / php неправильно настроен.
Я неправильно обрабатываю сессии?
Это имеет значение? Разве второй запрос не должен обрабатываться как другой поток?
Чужие контролируют мой VPS.
Хорошо, шучу. Я просто устал отслеживать эту проблему. Буду очень признателен, если кто-нибудь поймет, что здесь может пойти не так.