问题:下载链接应该显示在用户的主页中。只有在用户登录后才能访问该下载链接。
但真正的问题是用户的主页和下载链接位于不同的 Web 服务器上。
有没有办法可以发送带有下载链接的令牌并在那里验证它?
问题:下载链接应该显示在用户的主页中。只有在用户登录后才能访问该下载链接。
但真正的问题是用户的主页和下载链接位于不同的 Web 服务器上。
有没有办法可以发送带有下载链接的令牌并在那里验证它?
users server = serverA.com
your server = serverB.org
如果我理解正确,问题是,用户只在服务器 A 上登录,而不在服务器 B 上登录,并且无法共享会话状态(例如,通过数据库进行会话处理)?
从我的脑海中,我可以想到一个选择:
服务器 B 只是询问服务器 A 的
意思是:服务器 A 上的链接包含用户会话 id*。serverB 然后询问服务器 A 会话是否有效。
如果没有这两台服务器之间的通信,您将无法做到这一点。
* 注意:最好使用随机令牌代替 session-id。会话 ID 不应该是私有的。
这不会阻止您的用户共享 url,因此如果他们希望其他人下载文件,他们可以简单地传递 url。另一方面,恶意用户也可以使用他的会话 ID 执行此操作。
您可以使下载链接将带有用户信息的表单提交到目标服务器。这样做有安全隐患,因为登录信息将作为隐藏表单字段的值出现在页面的源代码中,所以这可能不是您想要的方式。
第二种选择是将会话信息存储在数据库中,然后简单地将会话密钥传递给新服务器。这将要求第二台服务器能够联系第一台服务器的数据库并对其运行查询。设置具有从该服务器登录以进行读取访问权限的用户名应该足以做到这一点,而不会打开许多安全漏洞。
最后,您可以在第一台服务器上设置一个 Web 服务,当给定用户名时将返回是/否答案,验证用户的登录状态。然后,第二台服务器上的接收链接将获取用户名并在构建响应之前验证登录状态。
如果用户单击该链接,他将从他的服务器转到您的服务器。
如果他在您的服务器上登录,那么您可以进行任何您需要的检查,因为他正试图访问您服务器上的文件。即使链接显示在其他服务器上。
也就是说,如果您使用会话来保持用户登录,下载代码中应该足以启动会话,session_start()
并且用户应该登录他已经拥有的会话。