如何确认访客所在的国家

在建设网站的时候,有时会遇到根据不同国家的访客显示不同信息的需求。尤其是网站所用语言的国际化要求,比如对美国的访客显示英语,对中国的访客显示中文。

有两种途径能够解决此问题。

一. 使用CultureInfo与RegionInfo类


1

2

3

4

5

6

7

public static string GetISORegionName(HttpRequest request)

{

    var lan = request.UserLanguages.First();

    var cultureInfo = CultureInfo.CreateSpecificCulture(lan);

    var regionInfo = new RegionInfo(cultureInfo.LCID);

    return regionInfo.TwoLetterISORegionName;

}

  •  通过Request取得访客客户端所用语言
  •  由该语言代码生成CultureInfo
  •  由所生成的CultureInfo的LCID生成RegionInfo
  •  取得RegionInfo的TwoLetterISORegionName值,即ISO 3166中使用两位字母所代表的国家/地区

* 使用中文环境的客户端(zh-CN)会得到"CN"的结果,而使用英文环境的客户端(en-US)则会得到"US"。

* 这种方法很明显会有个问题,判断的结果依赖访客的客户端语言环境而非真实的所在国家地理位置。

二. 使用MaxMind的免费数据库及相关API

通过IP地址取得对应的国家地理位置,可以采用数据供应商所提供的数据库,以一般查询的方式获得相应的信息。不过这些数据库通常是需要付费的。

当然也有免费的产品,比如MaxMind发布的免费数据库。

数据库的下载地址:http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz

需要用到的dll可以由NuGet方法取得, PM> Install-Package MaxMind.GeoIP2  ,安装完成后项目中会新加MaxMind.Db以及MaxMind.GeoIP2两个dll引用。

在调用GeoIP2的API之前,还需要完成一项工作,即取得访客的IP地址。

最简单的方式是使用 HttpContext.Current.Request.UserHostAddress ,不过在访客使用代理服务器的场景下,此方式所获得的IP地址就是不正确的了。

因此需要变更方法,改用下列的代码:


1

2

3

4

5

6

7

8

9

public static string GetClientIpAddress(HttpRequest request)

{

    var userHostAddress = request.UserHostAddress;

    var xForwardedFor = request.ServerVariables["X_FORWARDED_FOR"];

    if (string.IsNullOrEmpty(xForwardedFor))

        return userHostAddress;

    var forwardingIps = xForwardedFor.Split(',').ToList();

    return forwardingIps.Any() ? forwardingIps.Last() : userHostAddress;

}

当这一步完成后,就可以进入正题,调用GeoIP2的API以获得访客所处的国家。


1

2

3

4

5

6

7

8

9

public static string GetISOCodeByMaxMind(HttpRequest request)

{

    using (var reader = new DatabaseReader(HttpContext.Current.Server.MapPath("~/GeoLite2-Country.mmdb")))

    {

        var ipAddress = GetClientIpAddress(request);

        var country = reader.Country(ipAddress);

        return country.Country.IsoCode;

    }

}

  •  实例化DatabaseReader,将数据库所在路径作为其构造方法的参数
  •  取得客户端IP地址
  •  由IP地址查询所在国家
  •  得到国家的IsoCode,同样是ISO 3166中使用两位字母所代表的国家/地区

* 如果无法从数据库中取得对应信息,上述方法会抛出异常,所以在实际开发时有必要加上try/catch语句加以控制。

时间: 2024-10-09 09:42:04

如何确认访客所在的国家的相关文章

在WordPress中使用PHP脚本来判断访客来自什么国家_php技巧

区分访客国家有什么用? 这里是几个我利用该功能的例子. 1.区分网站功能 这个博客有翻译文章的功能, 这是为了方便海外访客阅读文章, 但对中国人显得十分多余. 所以我通过 IP 判断国家, 对中国大陆地区屏蔽翻译功能. 2.区分展示广告 比如中国大陆地区在侧边栏最下方看到的是拿福能的广告, 而其他地区看到的是 Google 的广告. hostucan 是我的一个广告主, 有英文网站, 也有中文网站, 所以我可以向他提供区分展示服务, 免得浪费流量. 3.屏蔽布点服务 海外有很多好的服务平台, 在

根据访客所在城市ip地址自动跳转到分站的php代码

<? //php教程获取ip的算法 $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"]; //echo $user_IP; //===================

吸引访客,做内容有价值的网站

学发现很多网站经过搜索引擎优化后,但网站有了流量之后,为什么访客不会逗留很久?是不是忘了你的访客(顾客)的需要?如果你的访客(顾客)连一秒钟都不愿意多逗留,他怎么能够了解从而购买你的产品和服务? 建站学今天告诉你建立网站时必须牢记的一些事项,以确保你的网站是一个足够吸引你的访客,花一些时间去浏览的地方. 一些SEO和网站拥有者总是关注一些小技巧使他的网站更容易被搜索引擎发现,他们优化他们的网页使其在搜索引擎的结果页面(SERPs)上排到更高的位置.这是一个很值得去做的事情,但问题是在这个过程中,

返璞归真让站点真正为访客来服务

不论是哪一个行业的站点,其作为一个站点的根本的运营之道就是帮助访客和向访客更好的去展示自身所在行业的价值,一个站点只有从这个方向切入,那么才是一个纯纯粹粹的站点.套句老话:如果一件事物仅仅是为了自身的盈利而不去考虑顾客的利益,那么这个事物不会存活的太久.只有一个站点能够帮助到自己的访客,或者能让访客得到他想要的东西,那么你的站点才是一个合格的站点.扪心自问能有多少站长能做到这点.许多站点建立的方向至始至终都是围绕盈利,忽视了我们的目标访客真正需要什么,只是一味的通过讨好搜索引擎获得好的排名. 搜

实例解读何种Title才能真正吸引访客点击

记得笔者刚踏入SEO行业时写Title只懂的单纯的写关键词,随着对于SEO的认识加深,笔者开始考虑如何写Title才能吸引访客点击,在一阶段的分析与实践后笔者认为要让我们站点的Title更加吸引目标访客的点击,首先我们就需要做好我们站点的价值定位,走差异化路线. 一.过去笔者写Title的方法 在说如何做好网站title价值定位和如何走差异化路线前,我们看一下笔者之前的书写方式,这些可能也是很多seoer现阶段使用的title书写方式.我们先来看看这么写究竟能不能起作用呢? 1.目标关键词+企业

php获取浏览器信息、访客语言、访客操作系统、访客IP地址及访客地理位置

php获取浏览器信息.获取访客语言.获取访客操作系统.获取访客IP地址.获取访客地理位置. php获取浏览器信息,获取访客语言:简体中文.繁體中文.English.获取访客操作系统:Windows.MAC.Linux.Unix.BSD.Other.获取访客IP地址.获取访客地理位置,使用 新浪腾讯接口. <?php /** * 获取访客信息的类:语言.浏览器.操作系统.IP.地理位置.ISP. * 使用: * $obj = new guest_info; * $obj->GetLang();

团购网站大全应该怎么做才能留住访客

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近团购网站已经不能用一个"火"字来形容了,从3月份王兴的美团上线至今,全国已经大大小小的冒出了过千个团购网站.团购,真的那么受欢迎吗?每个团购 网站提供的服务,究竟差异有多大?这些,都需要打一个大大的问号. 当然,本文并不是要开篇讨论团购网站的前途.本文来自口碑团站长,口碑团是一个提供团购网站大全以 及11500.htm

分析新老访客对我们的站点有什么具体意义

摘要: 作为站长,我们每天都要分析网站的数据.尤其是在访客数据的分析是十分的重要的.在访客的分析之中我们都会分析道网站的新访客与老访客之间的数据.简单地说,新访客就是第一 作为站长,我们每天都要分析网站的数据.尤其是在访客数据的分析是十分的重要的.在访客的分析之中我们都会分析道网站的新访客与老访客之间的数据.简单地说,新访客就是第一次访问站点或者第一次使用站点服务的访客;而老访客则是之前已经造访过我们的站点或者使用过站点服务的访客.无论是新老访客都能为网站带来价值,这也是分析的意义所在. 那么分

网站应该如何吸引访客 留住访客

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 网站想要具备活力,具备生机就一定需要"人气.流量".人气与流量又从哪里来呢?靠网站?靠自己?靠坚持?我想说的是这三点缺一不可.今天就先来说说如何建立一个能够吸引访客留住访客的网站吧. 网站要建设得美丽,即使不美丽,简洁大方也是一大亮点.人靠衣装佛靠金装,网站也一样,一个美丽的外表才能够吸引用户的脚步,才能够加深访客的印象,