使用keep-alive连接(HTTP 1.1)在PHP中创建类似ftp的会话

使用keep-alive连接(HTTP 1.1)在PHP中创建类似ftp的会话,php,session,authentication,keep-alive,http-1.1,Php,Session,Authentication,Keep Alive,Http 1.1,我正在寻找一种方法来跟踪HTTP 1.1连接在请求之间保持活动状态,以便获得类似ftp的会话。 其想法是在第一次请求时进行身份验证,然后在套接字仍然打开时保持身份验证有效(使用HTTP 1.1保持活动特性) 到目前为止,我一直在寻找这样一个解决方案,但没有取得多大成功 我正在寻找信息,例如: 在PHP中是否有apache提供的套接字ID 是否有一个模块允许向HTTP 1.1连接添加信息(可以从PHP使用) 还有其他想法吗?你不能那样做 我认为Apache(或任何web服务器)都不会向PHP脚

我正在寻找一种方法来跟踪HTTP 1.1连接在请求之间保持活动状态,以便获得类似ftp的会话。 其想法是在第一次请求时进行身份验证,然后在套接字仍然打开时保持身份验证有效(使用HTTP 1.1保持活动特性)

到目前为止,我一直在寻找这样一个解决方案,但没有取得多大成功

我正在寻找信息,例如:

  • 在PHP中是否有apache提供的套接字ID
  • 是否有一个模块允许向HTTP 1.1连接添加信息(可以从PHP使用)
还有其他想法吗?

你不能那样做

我认为Apache(或任何web服务器)都不会向PHP脚本公开套接字ID。但是可以使用
$\u服务器['REMOTE\u ADDR']
$\u服务器['REMOTE\u PORT']
唯一地标识连接,因为同一客户端不能同时从同一临时端口启动到同一服务器的两个连接

但即使您这样做,保持活动会话可能也不会停留足够长的时间,以允许像FTP那样进行有意义的人机交互。大多数保持活动会话在5-15秒后自动终止,具体取决于web服务器的配置。您可能可以对此进行调整,但将连接保持更长时间是一个非常糟糕的主意,尤其是在使用Apache和mod_php时,因为长时间的连接可能会以牺牲其他用户为代价垄断服务器资源。此外,计算机和路由器倾向于重用临时端口,因此不能保证您与同一用户通话。考虑到人们每天使用的所有代理和反向代理,事情变得更加复杂


只需使用会话和/或cookie即可。它们总是有效的。

如果您不仅限于apache,而且可以简单地运行php脚本,我认为您可以做到这一点

PHP允许您打开一个特定的端口,并对其进行低级读写。这样,您就可以编写任何现有的或您自己的协议


对于这种特殊情况,可以让apache在非http端口上运行,并从定制PHP脚本中侦听http端口。然后,您应在连接时验证请求;为用户附加一个自定义头(称为myauth),然后将请求转发给apache。确保在读取原始http请求时过滤掉myauth头

谢谢,我已经考虑过远程地址+端口,但是我想避免会话劫持,所以上面两个都不够可靠,对于基于cookie(或无cookie)的会话也是如此。我也不想使用SSL,因为我想要全速,而且我的数据已经加密了。。。所以我还在找。。。