2011-05-12 83 views
2

是否有替代$ _SERVER ['REMOTE_ADDR']。它返回访问站点的计算机的IP地址。 我试图搜索有关路由器分配的相同的外部IP,并进入此: How do two computers connect to same external address through NAT? 并发现如果计算机连接到相同的调制解调器,则分配相同的外部IP。 我在php中使用$ _SERVER ['REMOTE_ADDR']来创建一个简单的登录程序,以确定用户是否已经登录到同一网络中的其他地方。如果这些计算机通过路由器连接到同一个调制解调器,这实际上不会工作。

+3

将IP地址作为唯一的用户验证是一个坏主意。你应该设置会话。参见http://php.net/manual/en/features.sessions.php – Diarmaid 2011-05-12 13:25:32

+1

@Diarmaid或HTTP Auth eg。 http://php.net/manual/en/features.http-auth.php – Treffynnon 2011-05-12 13:26:51

+0

ip地址不足以进行用户认证(例如,如果用户在同一个代理后面,你会做什么?),你应该使用session。 – soju 2011-05-12 13:27:47

回答

2

使用更传统的基于cookie的登录解决此问题。浏览器通过提供唯一标记来标识用户。正如你所发现的那样,叶问题并不是唯一的。

+0

谢谢,刚刚从你说的一个想法:} – 2011-05-12 14:02:55

7

不,这是你能做的最好的。服务器只知道请求来自何处,并且可能是是代理或NAT路由器或某个其他实体,其不是而是直接最终用户。对此你无能为力,这就是网络的工作原理。

解决方案很简单:不要使用IP来识别用户。永远。使用cookies。

+0

我还没有说完整个故事,我实际上使用会话来存储所有登录的用户名。而Cookie用于在本地存储用户名和IP。 – 2011-05-12 14:02:15