在另一台服务器上验证用户,然后访问下载文件

在另一台服务器上验证用户,然后访问下载文件

问题描述:

我有一台2台服务器。第一台服务器有php和mysql,但第二台服务器只有php(是下载主机)。 我的网站是关于销售视频,并且由于第一台服务器受到限制(每月流量和空间),因此我需要在第二台服务器上上传视频。所有视频都必须有动态链接,并且所有链接必须是一次性的。在另一台服务器上验证用户,然后访问下载文件

实施例:

  1. 用户1购买视频abc,该用户具有低于链接下载:http://example.com/1enewk3hd(指 http://example.com/files/video_abc.mp4

  2. 用户2买视频abc,该用户具有低于链路下载:http://example.com/sddfse445(指 http://example.com/files/video_abc.mp4

  3. 用户必须不能被真正的链接来下载视频http://example.com/files/video_abc.mp4

我的问题

  1. 通过PHP和htaccess的是能够2服务器上的这种情况下(没有MySQL的)?

  2. 如果是的话,请指导我什么是对 第二服务器上进行验证用户的最佳方式,然后访问下载文件(没有MySQL的)

  3. 在一些网站上,当用户登录服务器1上,可以下载从 服务器2.如果从服务器1注销,则无法访问服务器2. 这是怎么回事?我们不能使用服务器2上的服务器1的会话!

+0

是的,有一种令人难以置信的数量不同的方式可以在不需要数据库的情况下对某人进行身份验证。但是,如果您知道并确信您的唯一解决方案涉及MySQL,为什么您不允许server2联系server1上的数据库? – IsThisJavascript

+0

@ WillParky93感谢亲爱的,但如何将服务器2连接到数据库服务器1?不是很慢? – mghhgm

+0

它会比本地连接慢,但足够快以至于看不到差异。请联系server1主机并要求他们添加一条规则,以允许数据库接受来自服务器2的连接。您可以将任何本地IP列入白名单,以便在mysql中进行连接。 – IsThisJavascript

让第一台服务器进行认证。 在第一台服务器上创建链接,这些链接有效时间为x分钟。保护该链接以使用散列进行操作。

哈希= SHA256(validuntil +共享密钥在两台服务器上)

样品: https://server2/video_abc.mp4?validuntil=2017-08-07_160000&hash=ABC123EF5244

(我的样品中我也会使用mod_rewrite为一个不错的URL)

现在客户端重定向到生成链接的新服务器。 php脚本通过使用共享密钥验证查询参数“validuntil”和“hash”。然后检查validuntil是否过期。

如果不是流式传输文件。不要将流媒体文件放入webroot中。 如果您可以使用x-sendfile header,那么它们通过脚本readfile或您的网络服务器发送。

+0

谢谢亲爱的,但链接必须是一次性的。这个怎么做? – mghhgm

+0

在某些站点上,当用户在服务器1上登录时,可以从服务器2下载。如果从服务器1注销,则无法访问服务器2.这是怎么回事? – mghhgm

+1

链接仅适用于5分钟(或您设置的任何超时)。如果需要的话,包括远程IP来限制链接甚至更多。当你有一个非常大的集群时,如果一个会话有效,你将被请求充斥。这是一个离线解决方案。是的,一个链接不能立即禁用,但谁在乎5分钟?想想你需要做更多的努力以及有什么好处。关于即时禁用登录:您想如何取消已经运行的下载。 –