1、全国性的网站如何自动定位城市,并跳转到相应的城市网站呢?
网友访问网站先检查cookie,如果cookie有记录,则转向cookie对应的分站;
如果第一次访问网站则检查访问者的ip所对应的城市,如果查询到自动转向对应的分站并将网址写入到cookie;如果没有查到,则转到城市选择的页面。比如 访问者是北京,则自动跳转到 bj.abc.com
首先下载最新版的动网(DVBBS)IP数据库
http://bbs.dvbbs.net/dispbbs.asp?BoardID=13&ID=1527565&replyID=&skin=1&jdfwkey=46178
注意,我下面说的只是方法,你可以根据自己的情况自己修改
运算将真实IP转换为数字,比如北京的IP段是 : 1.1.0.0 — 1.1.0.255
Startip: 1*256*256*256+1*256*256+0*256+0 = 16842752 (这个数字才是最终要放到数据库里)
Endip: 1*256*256*256+1*256*256+0*256+255 = 16843007 (这个数字才是最终要放到数据库里的)
user_ip = Request.ServerVariables(”REMOTE_ADDR”) ”取得访问者IP
userip_ary=split(user_ip,”.”)
tmp_userip=userip_ary(0)*256*256*256+userip_ary(1)*256*256+userip_ary(2)*256+userip_ary(3) ” 按规定转换IP为数字
‘从数据库找出用户IP属于的城市
set rs=Server.CreateObject(”ADODB.Recordset”)
sql=”select * from dv_address where ip1<="&tmp_userip&" and Endip>="&tmp_userip
rs.open sql,conn,1,1
if rs.eof then
response.redirect “index.asp” ’如果没有该城市或是IP无法识别则转到首页,也可以指定页面
else
response.redirect rs(”webUrl”) ’如果有转到指定页面webUrl字段自己添加
end if
rs.close
set rs=nothing
---------------------------------
不过根据城市来判断的话,IP段数量太多了,我查了一下青岛,就有2000多条了,我把相连的IP段都放到一起,最后只剩147条了,我是把ip段都写到ASP数组了。
如下:
cityip.asp
程序代码
sql="select * from dv_address where country like '%青岛%'"
rs.open sql,conn,3,1
i=0
ip1=0
ip2=0
do while not rs.eof
ip1=rs("ip1")
if ip1=ip2+1 then
ip2=rs("ip2")
elseif ip2=0 then
ip2=rs("ip2")
response.Write "city("&i&",0)="&ip1&"<br />"
'response.Write ip1&"-"
else
response.Write "city("&i&",1)="&ip2&"<br />"
response.Write "city("&i&",2)=""/qingdao/""<br /><br />"
'response.Write ip2&"<br />"
i=i+1
ip2=rs("ip2")
response.Write "city("&i&",0)="&ip1&"<br />"
'response.Write ip1&"-"
end if
rs.movenext
loop
rs.close
set rs=nothing
response.Write "city("&i&",1)="&ip2&"<br />"
response.Write "city("&i&",2)=""/qingdao/"""'用它指向相对应网址
'response.Write ip2
response.Write "<p>"&i&"</p>"
下面是调用的方法:
default.asp
程序代码
'获取IP计算
user_ip="201.0.131.202"
userip_ary=split(user_ip,".")'IP分离成数组
tmp_userip=userip_ary(0)*256*256*256+userip_ary(1)*256*256+userip_ary(2)*256+userip_ary(3) ' 按规定转换IP为数字
for i=0 to city_num'city_num是上面数组的总数量,自己要定义一下
if tmp_userip>=CSng(city(i,0)) and tmp_userip<=CSng(city(i,1)) then
response.Redirect city(i,2)
exit for
end if
next
'如果没有跳转
response.Write "未识别"
原文地址:http://www.corange.cn/archives/2008/12/2781.html