【问题标题】:Rails accessing and manipulate user_ip_addressRails 访问和操作 user_ip_address
【发布时间】:2011-11-04 19:40:33
【问题描述】:

我想检查设备 ip 地址访问我的站点 (root to=>home#index) 的次数,如果该地址多次访问我的站点,则执行一段代码(任何内容)。我如何使用 rails 完成此操作?换句话说,我如何访问和设置一个变量来存储index action 中的用户 ip_address 登录数?根页面是 home#index。为了澄清更多用户不必是注册用户,我只想通过计算机跟踪ip 地址。我需要帮助以注释掉索引操作中的单词。有设计current_sign_in_ip 但我不确定这是否是为了解决这个问题,因为我对设计和轨道都很陌生。非常感谢!

控制器

       class HomeController < ApplicationController

       def index
       #access user ip address
       #set a variable to increment number of times the address come to a site
       # if no_of_ip_login is_greater_than_1 #In other words if it is a returning user

       redirect_to :controller=>"home" ,:action=>"show"
       end

       end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 devise ruby-on-rails-3.1 request


    【解决方案1】:

    你可以使用

    ip_addr = request.env['REMOTE_ADDR']
    

    还有:

    request.remote_ip
    

    还想提一下,如果您使用负载均衡器,则 REMOTE_ADDR 可能会返回负载均衡器的 IP,而不是实际客户端的 IP。 在这种情况下,您通常可以使用以下内容:

    ip_addr = request.env['X_FORWARDED_FOR']
    

    所以我推荐 request.remote_ip。它返回 HTTP_CLIENT_IP 或 X_FORWARDED_FOR 如果存在,否则为 REMOTE_IP。

    【讨论】:

    • 谢谢你的回答,但我怎么知道我是否落后于负载均衡器?对不起,我是 Rails 的新手
    • 负载均衡是一种计算机网络方法,用于在多台计算机或计算机集群之间分配工作负载。如果您的服务器有负载均衡器,那么 ip_addr = request.env['REMOTE_ADDR'] 将返回负载均衡器的 IP .它只在这种情况下。但是 request.remote_ip 总是会返回给你用户的 IP。
    • 那么我认为request.remote_ip 是更好的选择。如果该信息有帮助,我将在heroku 上进行部署。使用其中一个的优点或缺点是什么?
    • 是的 request.remote_ip 是更好的选择 :-)
    • 非常有帮助。我不小心收集了负载均衡器地址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多