我是一名 iPhone 开发人员 - 网络开发新手,所以请耐心等待!
我目前正在使用 MAMP 进行本地测试。
我的网站上有一个高度安全的部分。除了要求用户/通行证外,它还会检查用户的 IP。如果该帐户之前未在该 IP 使用过,它将将该 IP 连同唯一 ID 添加到持有表中,并向用户发送一封电子邮件,要求确认他们从该位置访问他们的帐户。
如果用户登录,并且他们的 IP 与我的“允许”表中与他们的用户 ID 关联的任何 IP 都不匹配,它会执行上述任务,并且他们会收到一封电子邮件。
我用来生成他们点击的链接的 url 的代码看起来有点像这样:
if (preg_match('/^127./',$ip)) {
// accessed from this machine
$val_url = "http://localhost:8888/mywebsite/admin/aproove_ip.php?email=$admin_email&val=$hash";
}
else if (preg_match('/^192\.168./',$ip)) {
// accessed form a local networked computer
$val_url = "http://super.local:8888/mywebsite/admin/aproove_ip.php?email=$admin_email&val=$hash";
// note super.local is my machine's address, 8888 is MAMP port
}
else {
// accessed from the WWW
$val_url = "http://www.mywebsite.com/admin/aproove_ip.php?email=$admin_email&val=$hash";
}
现在,在我的计算机上进行测试时,它运行良好。
但是,我决定(不要问为什么)从我的 iPod Touch 进行测试,在它发送给我的电子邮件中(验证 IP),它给了我完整的在线地址,就好像它是从 WWW 访问的一样(即两个正则表达式都不满意)。我查看了包含请求的保存表,请求的 IP 是:fe80::da30:62ff:fe18:6681。
我猜那是 ipv6? - 我需要知道的是:
我非常感谢对此的任何建议,因为我发现它真的很令人困惑
最佳答案
如果你想确保没有 IPv6 连接发生可以添加 Listen 0.0.0.0:80到你的apache配置。但是无论如何,大多数网络主机还不支持 IPv6(是的,我知道,我们现在是 2011 年),因此人们甚至不太可能通过 IPv6 连接到您。您看到这个的唯一原因是因为 bonjour(使 .local 地址起作用的原因)在 IPv6 上运行。
如果您想让您的代码准备好 IPv6,几乎不需要进行任何更改,因为大多数 IP PHP 函数都可以在 IPv4 和 IPv6 上运行。我记得所做的唯一更改是将 MySQL 表中的 varchar 数据类型增加到 IPv6 地址的最大长度 (39)。
我不确定 IPv6 是否按照与 subnet 相同的规则播放IPv4 确实如此,但我预计验证 IPv6 地址是否为本地地址会更加困难。
编辑:
fe80::/10 看起来是本地链接地址,它可能就像检查前 4 位数字一样简单。
关于php - 如何处理 IPv6 地址和 IPv4 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7290450/
我在理解Enumerator.new方法的工作原理时遇到了一些困难。假设文档中的示例:fib=Enumerator.newdo|y|a=b=1loopdoy[1,1,2,3,5,8,13,21,34,55]循环中断条件在哪里,它如何知道循环应该迭代多少次(因为它没有任何明确的中断条件并且看起来像无限循环)? 最佳答案 Enumerator使用Fibers在内部。您的示例等效于:require'fiber'fiber=Fiber.newdoa=b=1loopdoFiber.yieldaa,b=b,a+bendend10.times.m
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案
我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status
我设置了以下模型:classContact:no_freq?validates_presence_of:freq,:if=>:no_band?protecteddefno_freq?freq.nil?enddefno_band?band.nil?endendclassBand当我在我的新View中输入频率时,如果输入了频率,则不允许指定波段。这在我的其他观点中造成了问题,因为band现在为零。我如何允许不指定band并在我的index和showView中显示为空,然后在editView中允许在以后指定一个。通过执行以下操作,我已经能够让我的索引显示空白:contact.band&&co
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
对于我的大部分应用程序,我从Geocoder获取城镇/城市的纬度、经度、邮政编码等。我只是投入城市和州,作为返回,我得到了我处于一个有field的场景中。该场所需要一个地址,我正在从另一个来源获取该场所的纬度和经度。使用Geocodergem,我可以通过给地址提供经纬度来获取地址吗? 最佳答案 在Rails控制台中运行。latitude=40.0397longitude=-76.30144geo_localization="#{latitude},#{longitude}"query=Geocoder.search(geo_loca
我有一个grammarfile对于我正在尝试构建的一种新的通用编程语言。我正在努力使该语言健壮且易于使用(它深受Ruby等启发),为此我引入了一些左递归规则。我看到一些例子似乎表明了以下左递归规则:rulel_recursel_recurse/'somethingelse'end可以通过将其更改为非左递归:ruler_recurse'somethingelse'/r_recurseend对我来说,这看起来会有不同的问题并且仍然会失败。我是对的,还是这会“奏效”?我试图(查找和)消除的特定左递归可以在这个grammarfile中找到.我不确定哪些规则受到影响,但至少somewerepoi
在下面的测试用例中:classPackageclassComponentdefinitializep[:initialize,self]endendendclassPackage_A结果:[:initialize,#]#[:initialize,#]#如何获取特定的Package_A.component和Package_B.component? 最佳答案 ClassComponent是在Package中声明的,所以看起来是正确的。::指示在Package_A范围内查找名称Component。由于那里没有Component,它会查找父