if rs.eof or rs.bof Or err Then'数据库中没有该IP
response.redirect "/指定禁止访问的页面.asp"'不允许访问当前页
End if
这两句不够好用,能改成 如果数据库中有该IP则允许访问目前访问的页面内容。
这两句的意思是这样,你还没理解透彻:
如果数据库中没有这个IP,则进入跟目录的"/指定禁止访问的页面.asp",你的要求是“/jy/Default.asp ”,所以改成这个就可以解决问题一,关键在于jy/Default.asp 前面加了“/”,表示先返回跟目录,再找到“jy”目录,解决了路径问题。进入“/jy/Default.asp ”后,就不会执行当前页面的其它代码,达到保密的要求,如果有这个IP,则继续执行当前页面的代码,也就是允许访问当前页面的意思。所以,据我看来是没问题的。
问题二:如果使用绝对路径,则导致该页面不断的重定向。与判断似乎没有什么关系。。。。。
这个问题,肯定是你的“/jy/Default.asp”有问题,最可能的是这个页面也加了IP判断。当然不能加啦!!!
目前不知道是我调试服务器的问题还是代码问题,总之数据库中存在192.168.0.1和我在公网的IP。但是都无法访问 “指定禁止访问的页面.asp”
你用“http://localhost/”访问你的网站,那么你的IP就应该是“127.0.0.1”是你数据库里没有的,才会去访问“指定禁止访问的页面.asp”
至于IP到底是不是“127.0.0.1”,你可以用这个代码测试一下:
<%
Private Function getIP()
Dim strIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
getIP = Trim(Mid(strIPAddr, 1, 30))
End Function
response.write getIP()
%>
以下代码保存为checkip.asp
在要限制IP的页面引用<!--#include file="checkip.asp"-->
数据库连接已经有的在checkip.asp里删掉
<%
'***************************
'连接数据库,已经连接的删掉,不要重复
on error resume next
db_path = "ip.mdb"
Set conn= Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path)
conn.Open connstr
'****************************
'****************************
'获得真实IP地址
Private Function getIP()
Dim strIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
getIP = Trim(Mid(strIPAddr, 1, 30))
End Function
'****************************
'****************************
'检测访问的IP是否在数据库中
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "select ip from ip where ip = '"&getip()&"'"
rs.Open sql,conn,1,1
if rs.eof or rs.bof Or err Then'数据库中没有该IP
response.redirect "/指定禁止访问的页面.asp"'不允许访问当前页
End if
rs.close
set rs=Nothing
'****************************
%>
response.redirect "/指定禁止访问的页面.asp"'不允许访问当前页
End if
这两句不够好用,能改成 如果数据库中有该IP则允许访问目前访问的页面内容。
这两句的意思是这样,你还没理解透彻:
如果数据库中没有这个IP,则进入跟目录的"/指定禁止访问的页面.asp",你的要求是“/jy/Default.asp ”,所以改成这个就可以解决问题一,关键在于jy/Default.asp 前面加了“/”,表示先返回跟目录,再找到“jy”目录,解决了路径问题。进入“/jy/Default.asp ”后,就不会执行当前页面的其它代码,达到保密的要求,如果有这个IP,则继续执行当前页面的代码,也就是允许访问当前页面的意思。所以,据我看来是没问题的。
问题二:如果使用绝对路径,则导致该页面不断的重定向。与判断似乎没有什么关系。。。。。
这个问题,肯定是你的“/jy/Default.asp”有问题,最可能的是这个页面也加了IP判断。当然不能加啦!!!
目前不知道是我调试服务器的问题还是代码问题,总之数据库中存在192.168.0.1和我在公网的IP。但是都无法访问 “指定禁止访问的页面.asp”
你用“http://localhost/”访问你的网站,那么你的IP就应该是“127.0.0.1”是你数据库里没有的,才会去访问“指定禁止访问的页面.asp”
至于IP到底是不是“127.0.0.1”,你可以用这个代码测试一下:
<%
Private Function getIP()
Dim strIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
getIP = Trim(Mid(strIPAddr, 1, 30))
End Function
response.write getIP()
%>
以下代码保存为checkip.asp
在要限制IP的页面引用<!--#include file="checkip.asp"-->
数据库连接已经有的在checkip.asp里删掉
<%
'***************************
'连接数据库,已经连接的删掉,不要重复
on error resume next
db_path = "ip.mdb"
Set conn= Server.CreateObject("ADODB.Connection")
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath(db_path)
conn.Open connstr
'****************************
'****************************
'获得真实IP地址
Private Function getIP()
Dim strIPAddr
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
getIP = Trim(Mid(strIPAddr, 1, 30))
End Function
'****************************
'****************************
'检测访问的IP是否在数据库中
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "select ip from ip where ip = '"&getip()&"'"
rs.Open sql,conn,1,1
if rs.eof or rs.bof Or err Then'数据库中没有该IP
response.redirect "/指定禁止访问的页面.asp"'不允许访问当前页
End if
rs.close
set rs=Nothing
'****************************
%>