有四个人共享同一个WiFi连接,根据以下定义,他们的IP地址必须是唯一的。
IP地址是分配给参与使用互联网协议进行通信的每个设备的数字标签。
问题1:是这样吗?
为了唯一地识别他们,我尝试了:
request.remoteAddress
但是我为这四个人获取的IP地址都相同。
问题2.如何唯一地识别它们?(我应该让他们传递某些令牌之类的东西来唯一标识他们吗?但我更喜欢使用唯一的IP地址)
有四个人共享同一个WiFi连接,根据以下定义,他们的IP地址必须是唯一的。
IP地址是分配给参与使用互联网协议进行通信的每个设备的数字标签。
问题1:是这样吗?
为了唯一地识别他们,我尝试了:
request.remoteAddress
但是我为这四个人获取的IP地址都相同。
问题2.如何唯一地识别它们?(我应该让他们传递某些令牌之类的东西来唯一标识他们吗?但我更喜欢使用唯一的IP地址)
这4个人可能来自同一网络。在这种情况下,对外部网络来说,IP地址将被视为相同的IP地址。
很抱歉,没有简单的方法来识别用户,因为他们总是可以修改发送给您的数据。这就是为什么几乎所有的网络服务都需要登录(他们自己的系统或Facebook、Google等)。然而,问题在于,如果有人注册了足够多的账户,他们可以一直向您发出请求。为了避免这个问题,您可能希望在注册后定期引入Captcha验证。
此外,并不是每个用户都有静态IP,这意味着他们每次被阻止时都可以更改IP(如果我正确理解了问题,如果您通过IP进行阻止)。
从一个路由器发送到局域网之外的服务器的请求将全部具有相同的IP地址。这就是为什么会话ID很有用的原因之一。如果您需要一个标识符,即使在同一局域网下的用户也必须唯一,那么您将需要使用会话变量。
考虑查看这篇文章:Play 2.0中的session.id在哪里?
基本上创建您的唯一ID。(代码取自引用的SO post)
// Generate a unique id
String uuid=session("uuid");
if(uuid==null) {
uuid=java.util.UUID.randomUUID().toString();
session("uuid", uuid);
}
它们在内部网络上都有唯一的IP地址(例如192.168.x.x或其他内部IP地址),详见http://en.wikipedia.org/wiki/Private_network和RFC1918。 它们通过防火墙/网关连接到公共互联网,该防火墙/网关执行网络地址转换(详见http://en.wikipedia.org/wiki/Network_address_translation)。