Использование keep-alive соединений (HTTP 1.1) для создания ftp-подобных сессий в PHP - PullRequest
0 голосов
/ 08 мая 2011

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

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

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

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

Есть еще идеи?

Ответы [ 2 ]

1 голос
/ 08 мая 2011

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

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

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

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

0 голосов
/ 02 июля 2015

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

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

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

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

...