2009-06-23 61 views
3

问题:下载链接应显示在用户的主页中。 该下载链接应该只能在用户登录时访问。如何验证跨服务器的用户会话?

但真正的问题是用户的主页和下载链接位于不同的Web服务器上。

有没有一种方法我可以发送下载链接令牌并验证它呢?

+0

显示你的尝试,在这里复制相关的代码。 – 2009-06-23 11:34:34

+0

可能的重复:http:// stackoverflow。com/questions/580671/configure-session-to-work-on-application-that-deployed-multiple-server – Gumbo 2009-06-23 11:42:13

回答

0

如果用户点击链接,他将从他的服务器到您的服务器。

而且,如果他记录在您的服务器上,那么你可以做任何检查你需要,因为他正试图访问服务器上的文件。即使链接显示在其他某个服务器上。

这就是说,如果您使用会话来保持用户登录,那么在下载代码中应该足够用session_start()开始会话,并且用户应该已经登录了会话。

1
users server = serverA.com 
your server = serverB.org 

如果我的理解对不对,问题是,用户只登录服务器A,但不能在服务器B,而且也没有办法共享会话状态(例如会话处理转移数据库)?

从我的头顶,我能想到的一个选项:

服务器B只是要求服务器A
手段:在serverA链接包含用户会话ID *。然后服务器B询问服务器A会话是否有效。

如果没有这两台服务器之间的通信,就无法做到这一点。

*注:不是会话ID倒不如使用随机令牌。会议ID不应该是私人的。

不会停止你的用户分享的网址,因此,如果他们想让别人来下载文件,他们可以简单地绕过URL。另一方面,恶意用户也可以通过他的session-id做到这一点。

1

你可以让下载链接提交一个带有用户信息的表单到目标服务器。这样做会带来安全隐患,因为登录信息将作为隐藏表单字段的值出现在页面的源代码中,因此可能不是您想要的方式。

第二个选择是将存储在数据库中的会话信息,然后简单地传递会话密钥到新的服务器。这需要第二台服务器能够联系第一台服务器的数据库并对其运行查询。设置具有从该服务器登录以进行读取访问的权限的用户名应足以完成此操作,而不会打开许多​​安全漏洞。

最后,你可以设置第一台服务器上的Web服务得到一个用户名时,将返回一个是/否的答案,验证登录用户的身份。然后,第二台服务器上的接收链接将获取用户名并在构建响应之前验证登录状态。