我正在寻找一种方法来跟踪跨请求保持活动状态的 HTTP 1.1 连接,以便获得类似 ftp 的会话。这个想法是在第一次请求时进行身份验证,然后在套接字仍然打开时保持身份验证有效(使用 HTTP 1.1 保持活动功能)。
直到这里,我一直在寻找这样的解决方案,但没有取得多大成功。
我正在寻找信息,例如:
- PHP 中的某个地方是否有可从 apache 获得的套接字 ID?
- 是否有允许向 HTTP 1.1 连接添加信息的模块(可以从 PHP 中使用的东西)?
还有什么想法吗?
我正在寻找一种方法来跟踪跨请求保持活动状态的 HTTP 1.1 连接,以便获得类似 ftp 的会话。这个想法是在第一次请求时进行身份验证,然后在套接字仍然打开时保持身份验证有效(使用 HTTP 1.1 保持活动功能)。
直到这里,我一直在寻找这样的解决方案,但没有取得多大成功。
我正在寻找信息,例如:
还有什么想法吗?
你不能那样做。
我不认为 Apache(或任何网络服务器,就此而言)将套接字 ID 暴露给 PHP 脚本。但是可以使用$_SERVER['REMOTE_ADDR']
和唯一标识一个连接,$_SERVER['REMOTE_PORT']
因为同一个客户端不能同时从同一个临时端口启动到同一个服务器的两个连接。
但是即使你这样做了,保持活动会话可能不会保持足够长的时间来允许像 FTP 那样进行有意义的人类交互。大多数保持活动会话会在 5-15 秒后自动终止,具体取决于您的 Web 服务器的配置。您也许可以对此进行调整,但是让连接保持活动的时间比这更长是一个非常糟糕的主意,尤其是在将 Apache 与 mod_php 一起使用时,因为长期连接会以牺牲其他用户为代价来垄断服务器资源。此外,计算机和路由器倾向于重用临时端口,因此无法保证您正在与同一用户通话。当您考虑到人们每天使用的所有代理和反向代理时,事情会变得更加复杂。
只需使用会话和/或 cookie。他们总是工作。
如果您不限于 apache,并且可以简单地运行 php 脚本,我认为您可以做到。
http://php.net/manual/en/book.sockets.php
PHP 允许您打开特定端口并对其进行低级读写。这样您就可以编写任何现有的或您自己的协议。
对于这种特殊情况,您可以让 apache 在非 http 端口上运行,并从自定义 PHP 脚本监听 http 端口。然后,您应在连接时验证请求;为用户附加一个自定义标头(称为 myauth),然后将请求转发给 apache。确保在读取原始 http 请求时过滤掉 myauth 标头。