Использование keep-alive соединений (HTTP 1.1) для создания ftp-подобных сессий в PHP

Я ищу способ отслеживать соединение HTTP 1.1, поддерживаемое между запросами, чтобы получить сессию, похожую на ftp. Идея заключалась бы в том, чтобы иметь аутентификацию по первому запросу, а затем поддерживать аутентификацию действительной, пока сокет все еще открыт (с функцией поддержки активности HTTP 1.1).

Я искал такое решение без особого успеха, пока здесь.

Я ищу информацию, такую ​​как:

  • есть ли где-нибудь идентификатор сокета от apache в PHP?
  • есть ли модуль, позволяющий добавлять информацию в соединение HTTP 1.1 (что-то, что можно использовать из PHP)?

Любая другая идея?

2 ответа

Вы не можете сделать это.

Я не думаю, что Apache (или любой другой веб-сервер) предоставляет идентификаторы сокетов PHP-скрипту. Но может быть возможно однозначно идентифицировать соединение, используя $_SERVER['REMOTE_ADDR'] а также $_SERVER['REMOTE_PORT'] потому что один и тот же клиент не может инициировать два подключения к одному и тому же серверу с одного и того же временного порта одновременно.

Но даже если вы сделаете это, сеанс keep-alive, вероятно, не будет длиться достаточно долго, чтобы обеспечить значимое взаимодействие с человеком, как это делает FTP. Большинство сеансов поддержки активности прекращаются автоматически через 5-15 секунд, в зависимости от конфигурации вашего веб-сервера. Возможно, вам удастся настроить это, но очень плохая идея - поддерживать соединения дольше, особенно при использовании Apache с mod_php, потому что длительное соединение может монополизировать ресурсы сервера за счет других пользователей. Кроме того, компьютеры и маршрутизаторы, как правило, повторно используют временные порты, поэтому нет гарантии, что вы общаетесь с одним и тем же пользователем. Все становится еще сложнее, если принять во внимание все прокси и обратные прокси, которые люди используют каждый день.

Просто используйте сеансы и / или куки. Они всегда работают.

Если вы не ограничены apache и можете просто запускать php-скрипты, я думаю, вы можете это сделать.

http://php.net/manual/en/book.sockets.php

PHP позволяет открывать определенный порт и иметь низкоуровневые записи для чтения на нем. Таким образом, вы можете написать любые существующие или ваши собственные протоколы.

В этой конкретной ситуации у вас может быть запущен apache на порте, отличном от http, и прослушивать порт http из пользовательского сценария PHP. Затем вы должны подтвердить подлинность запроса на подключение; добавьте пользовательский заголовок (назовите его myauth) для пользователя и затем перенаправьте запрос в apache. Обязательно отфильтруйте заголовок myauth при чтении исходного http-запроса.

Другие вопросы по тегам