0

我正在为 facebook 粉丝页面创建一个投票脚本:

http://www.facebook.com/apps/application.php?id=115400635147687&v=app_115400635147687

我正在使用以下方法获取 IP:

$_SERVER['REMOTE_ADDR']

但问题是每次我刷新页面,或者进行ajax调用,每次都会改变IP。有人告诉我,facebook 有很多 IP、代理。

基本上我需要将IP保存在数据库中,这样一旦来自某个IP的用户投票,他就不能再这样做了。

什么是解决方案或替代方案?

4

4 回答 4

3

通过 IP 阻止并不是真正可靠的做事方式(需要考虑共享相同公共 IP 的人)。既然它是一个 Facebook 应用程序,你不能改为通过登录的 Facebook 帐户来阻止吗?

于 2010-04-23T07:15:23.047 回答
2

我假设链接页面顶部的 IP 是您正在处理的内容。如果我们做一个whois:

$ whois 69.63.181.250

组织名称:Facebook, Inc.
组织 ID:THEFA-3
地址:1601 S. California Ave
城市:帕洛阿尔托
州省:CA
邮编:94304
国家:美国

网络范围:69.63.176.0 - 69.63.191.255
CIDR:69.63.176.0/20

我们发现这些 IP 属于 Facebook 的服务器,而不是您的用户。

如果我正确理解发生了什么,当有人从您的应用程序请求页面时,Facebook 的服务器会代表他们向您请求。在这种情况下,您根本无法获取用户的 IP。

于 2010-04-23T07:15:38.257 回答
2

请注意,在 Facebook 中开发粉丝页面时,Facebook 服务器本质上充当代理。也就是说,用户的浏览器向 Facebook 请求页面,然后 Facebook 的服务器向您的网站发出请求以获取内容。然后 Facebook 服务器重写所有链接和 Javascript,以便任何回调首先通过 Facebook 服务器。

最后,这意味着您永远不会在您的服务器上看到用户的“实际”IP 地址:您只会看到 Facebook 的 IP 地址。

据我了解,这样做是出于隐私原因。也就是说,用户必须明确允许您的应用程序访问他们的个人资料,然后您才能获得有关他们的任何“可识别”信息。

于 2010-04-23T07:17:51.450 回答
1

I found the perfect solution finally. Basically when you do ajax post, you can get the user's id using:

$_POST['fb_sig_user']
于 2010-04-23T08:20:21.787 回答