【问题标题】:What's the local IP address of the user accessing my website, in Node.js + Express?在 Node.js + Express 中访问我的网站的用户的本地 IP 地址是什么?
【发布时间】:2014-02-21 08:28:10
【问题描述】:

我需要知道进入我网站的用户的 IP 地址。我已经编写了以下代码,但它只返回用户的 WAN IP。这对我来说还不够,因为我需要完整的用户跟踪来防止他们在同一个按钮上单击两次(cookie 不是一个选项,因为大多数用户使用匿名模式)。

app.enable('trust proxy'); // enable trust proxy

我正在使用此代码获取 req.ips(理论上它有我想要的),或者如果最后一个为空,则只是 req.ip。问题是 req.ips 总是为空。

req.ips.length ? req.ips : [req.ip]

关于我现在可以做什么的任何想法?

【问题讨论】:

标签: node.js express ip


【解决方案1】:

听起来您可能已经(部分)回答了自己的问题,但我想为您提供一些想法。

首先,您永远无法获得计算机的本地分配 IP 地址:浏览器永远不会报告这些内容。您也可能无法获得有意义的识别“低级”网络协议信息,因为有许多不同的 NAT 方法。

正如您所提到的,解决此问题的传统方法是使用 cookie,但如果您的用户主要使用匿名模式,那么正如您所说,这不是一种选择。

您是否考虑过 HTML5 本地存储?这可以在匿名模式下访问,您可以像使用会话一样使用它,在每个客户端上存储一个唯一的会话 ID。这意味着您的客户需要一个相对现代的浏览器,但希望这不会成为问题。

这里有一些关于 HTML5 本地存储的信息:

http://diveintohtml5.info/storage.html

不过,这不是一个灌篮高手:匿名模式下本地存储的行为目前存在争议。这里有一个很好的讨论:

http://blog.whatwg.org/tag/localstorage

另一种选择是使用查询字符串...这可能不是一个很好的解决方案,并且很容易被用户挫败(如果您担心的话)。当您第一次登陆页面时,您可以使用包含唯一 ID 的查询字符串将用户重定向到同一页面。这种方法很麻烦,因为您必须确保将查询字符串添加到每个内部链接。但它确实解决了匿名浏览的所有问题。

【讨论】:

    【解决方案2】:

    你可以用这个

    this.body = this.req.headers['x-real-ip'];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-19
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 2015-03-06
      • 2015-01-16
      相关资源
      最近更新 更多