我需要知道进入我网站的用户的IP地址。我已经编写了以下代码,但它只返回用户WAN IP。这对我来说还不够,因为我需要完整的用户跟踪,以防止他们在同一个按钮上点击两次(因为大多数用户使用匿名模式,所以不能使用cookie)。
app.enable('trust proxy'); // enable trust proxy
我正在使用此代码来获取 req.ips (理论上它有我想要的)或只是 req.ip 如果最后一个是空的。问题是 req.ips 总是为空。
req.ips.length ? req.ips : [req.ip]
我现在可以做些什么的想法?
答案 0 :(得分:0)
听起来你可能(部分)回答了你自己的问题,但我想为你提出一些想法。
首先,您永远不会获得本地分配的计算机IP地址:这不是浏览器要报告的内容。您也可能无法识别“低级”网络协议信息,因为有许多不同的NAT方法。
解决这个问题的传统方法,如你所提到的那样,但是如果你的用户大多使用匿名模式,那么就像你说的那样,这不是一个选择。
您是否考虑过HTML5本地存储?这可以在匿名模式下访问,您可以像会话一样使用它,在每个客户端上存储唯一的会话ID。这意味着您的客户需要一个相对现代的浏览器,但希望这不会成为问题。
以下是有关HTML5本地存储的一些信息:
http://diveintohtml5.info/storage.html
但这不是一个扣篮:目前存在争议的匿名模式下本地存储的行为。这里有一个很好的讨论:
http://blog.whatwg.org/tag/localstorage
另一个选择是使用查询字符串...不是一个很好的解决方案,也许,并且很容易被用户挫败(如果你担心的话)。首次登陆页面时,可以使用包含唯一ID的查询字符串将用户重定向到同一页面。这种方法很麻烦,因为您必须确保将查询字符串添加到每个内部链接。但它确实解决了匿名浏览的所有问题。
答案 1 :(得分:0)
你可以用这个
this.body = this.req.headers['x-real-ip'];