这是我的计数器中的一段代码,数据库中有表ip,其中一个字段为isour为文本类型
我想当访问者的ip在202.208.176.000-202.208.191.255段内时向isour插入ok,否则插入nook。
此段代码所在的服务器ip为202.208.178.146
当在此台服务器上浏览时可以向数据库插入ok
但当用另一个ip 202.208.178.156的机器访问202.208.178.146时根据程序应该也插入ok,但结果什么数据也没插入
最后我又把此程序移到202.208.178.156这个服务器上,用202.208.178.146访问,结果也是什么也没插入,但用202.208.178.156个时也插入ok
结果很明显,此段程序好像只对本机上的ip起作用,这是何故?
realip=Request.ServerVariables("REMOTE_ADDR")
Num=Split(realip,".")
IpOne=Num(0)
IpTwo=Num(0)&"."&Num(1)
For I=0 to 3
Sip=Sip&String(3-Len(Num(I)),"0")&Num(I)
Next
isour="nook"
if Sip>=202208176000 and Sip<=202208191255 then
isour="ok"
end if
if clng(Sip)>=202208176000 and clng(Sip)<=202208191255 then
if CDbl(Sip)>=202208176000 and CDbl(Sip)<=202208191255 then
这样是没有问题得
转成double就可以了
算法好象就有问题
建议用
x1*256*256*256+x2*256*256+x3*256+x4
这样分成数组直接进行计算,不需要循环
而且你还有一个致命伤,您当时的Sip在判断的时候是你字符的形式计算的而不是数字,结果不可能准~~~!
把转换成我说的那样的算法然然后进行计算~~~
代码如下
realip=Request.ServerVariables("REMOTE_ADDR")
Num=Split(realip,".")
ipnum=cbyte(Num(0))*16777216+cbyte(Num(1))*65536+cbyte(Num(2))*256+cbyte(Num(3))
isour="nook"
if ipnum>=3402674176 and ipnum<=3402678271 then
isour="ok"
end if
我没有测试不知道有没有小BUG
你看下
我要100分