注册 登录
编程论坛 ASP技术论坛

来访者记录并显示,显示结果有问题 - [asp]

MrWolf 发布于 2014-04-23 22:57, 1136 次点击
页面地址:   http://elelab.snnu.
在global.asa中通过session_onstart来记录来访者的IP信息,存放在applicaiotn("vs")中,然后再上面的页面中显示出来。
结果在同一台计算机上,多个窗口里显示出不同结果,为什么会不同,望指教!
只有本站会员才能查看附件,请 登录

global.asa:
程序代码:
<script language="vbscript" runat="server">

Sub Application_OnStart
dim vs(1)
dim ipn(1)
Application("vss")=0
Application("vs")=vs
Application("ipn")= ipn
End Sub

Sub Session_OnStart
dim vss,vs,vs1,ipn,n
Application.Lock
vs=Application("vs")
vss=Application("vss")
ipn=Application("ipn")
n = vss
vip = request.servervariables("http_x_forwarded_for")
if vip = "" then vip = Request.ServerVariables("Remote_Addr")
if vss > 0 then
    do while vs(vss)<> vip and vss > 0
        vss = vss - 1
    loop
end if
if vss = 0 then
    n=n+1
    redim Preserve vs(n)
    redim Preserve ipn(n)
    vs(n) = vip
    ipn(n) = 1
    Application("vs")=vs
    Application("ipn")=ipn
    Application("vss")=n
else
    ipn(vss) = ipn(vss)+1
    Application("ipn")=ipn
end if
Application.UnLock
Session("vip")=vip
End Sub

Sub Session_OnEnd
dim vss,vs,ipn,n
Application.Lock
vs=Application("vs")
n=Application("vss")
ipn=Application("ipn")
vip = Session("vip")
if n > 0 then
    vss = 0
    do while vs(vss)<> vip and vss <= n
        vss = vss - 1
    loop
end if
if vss <= n then
    if ipn(vss) > 1 then
        ipn(vss) = ipn(vss)-1
        Application("ipn")=ipn
    else
'        if vss<n then
            vs(vss) = vs(n)
            ipn(vss) = ipn(n)
'        end if
        n=n-1
        redim Preserve vs(n)
        redim Preserve ipn(n)
        Application("ipn")=ipn
        Application("vs")=vs
        Application("vss")=n
    end if
end if
Application.UnLock
End Sub
</script>

visitorlist.asp:
程序代码:
<% Response.Buffer = True

 Response.ExpiresAbsolute
= Now() - 1

 Response.Expires
= 0

 Response.CacheControl
= "no-cache"  %><html>
<head>

 <meta http-equiv="refresh" content="20">

 <meta http-equiv="expires" content="0" />

 <meta http-equiv="cache-control" content="no-cache,must-revalidate" />

 <meta http-equiv="pragma" content="no-cache" />
<title>Visitor List</title>
</head>
<body>
<P>
<% response.write(now()) %>
<table align=center border=2 cellspacing=1>
<tbody>
<%
dim vss,vs,vs1,ipn,n
vss
= Application("vss")
vs
= Application("vs")
ipn
= Application("ipn")
' Application.Lock
n = vss
do while vss > 0
    response.write(
"<tr><td>"&vs(vss)&"</td><td>"&ipn(vss)&"</td></tr>"&chr(13))
    vss
= vss - 1
loop
%>
</tbody></table>
<%

vss
= Application("vss")
vs
= Application("vs")
ipn
= Application("ipn")
' Application.Lock
n = vss
response.write(
"<A>"&vss&"</A")
'do while vss > 0
'
    response.write("<tr><td>"&vs(vss)&"</td><td>"&ipn(vss)&"</td></tr>"&chr(13))
'
    vss = vss - 1
'
loop

%>

</body></html>


[ 本帖最后由 MrWolf 于 2014-4-24 09:59 编辑 ]
13 回复
#2
MrWolf2014-04-24 09:58
需要顶一下吗?
#3
MrWolf2014-04-24 16:16
求助!斑竹!
#4
MrWolf2014-04-24 16:16
求助!斑竹!
#5
MrWolf2014-04-25 07:58
斑竹,求助!
#6
MrWolf2014-04-25 07:58
斑竹,求助!
#7
tlliqi2014-04-25 08:02
需要顶一下吗?
#8
MrWolf2014-04-25 17:40
回复 7 楼 tlliqi
需要顶,更需要解决啊
#9
MrWolf2014-04-26 00:36
晕啊,为什么没有人能给予解答呢
#10
MrWolf2014-04-28 17:27
,,
#11
hu9jj2014-04-29 07:25
楼主的代码没有任何注释,我一下子也看不清是如何取用户IP的。我通常是用Request.ServerVariables("remote_addr")来取用户IP的,需要显示时就直接将这个代码插入到页面中,需要保存时则先将IP保存在变量中,然后与其他变量一同保存在数据库中。
#12
hu9jj2014-04-29 07:45
不清楚的楼主为什么要从下面的方式取得用户IP:
vip = request.servervariables("http_x_forwarded_for")
if vip = "" then vip = Request.ServerVariables("Remote_Addr")
更不清楚同在一个页面中还要通过Session来取得IP值。
vip = Session("vip")
#13
MrWolf2014-05-05 19:48
以下是引用hu9jj在2014-4-29 07:45:24的发言:

不清楚的楼主为什么要从下面的方式取得用户IP:
vip = request.servervariables("http_x_forwarded_for")
if vip = "" then vip = Request.ServerVariables("Remote_Addr")
更不清楚同在一个页面中还要通过Session来取得IP值。
vip = Session("vip")

版主终于露面了,非常感谢!
实在不好意思,没有写注释。

我大概解释一下。
我以上取得用户IP的方法是baidu的结果,是为了避免取得的是代理服务器的地址,其他方法我就不清楚了。
http://zhidao.baidu.com/question/18441897.html?qbl=relate_question_0&word=asp%20%C8%A1%B5%C3%D3%C3%BB%A7IP
http://zhidao.baidu.com/question/8737637.html?qbl=relate_question_0&word=asp%20%C8%A1%B5%C3%D3%C3%BB%A7IP

我这个来访者记录,没有记录到数据库中去。

在会话Session建立时,记录该会话的IP(一个IP多个会话,则进行计数),而在会话结束时,则该会话计数减1,减到0,则清除该IP
global.asa:
程序代码:

<script language="vbscript" runat="server">

' Application启动时, 初始化IP数组。
Sub Application_OnStart
dim vs(1)
dim ipn(1)

 Application("vss")=0

 Application("vs")=vs

 Application("ipn")= ipn
End Sub

' Session启动,
Sub Session_OnStart
dim vss,vs,vs1,ipn,n

 Application.Lock

 vs=Application("vs")

 vss=Application("vss")

 ipn=Application("ipn")

 n = vss

 vip = request.servervariables("http_x_forwarded_for")   '这两行取得用户IP
if vip = "" then vip = Request.ServerVariables("Remote_Addr")
'如果 已经有用户,看是否是重复IP
if vss > 0 then
     do while vs(vss)<> vip and vss > 0
         vss = vss - 1
     loop
end if
' 不是重复IP, 则增加此IP,并且计数值为1
if vss = 0 then
     n=n+1
     redim Preserve vs(n)
     redim Preserve ipn(n)
     vs(n) = vip
     ipn(n) = 1
     Application("vs")=vs
     Application("ipn")=ipn
     Application("vss")=n
else   ' 是重复IP,则计数值加1.
     ipn(vss) = ipn(vss)+1
     Application("ipn")=ipn
end if

 Application.UnLock

 Session("vip")=vip
End Sub

'会话结束
Sub Session_OnEnd
dim vss,vs,ipn,n

 Application.Lock

 vs=Application("vs")

 n=Application("vss")

 ipn=Application("ipn")

 vip = Session("vip")
if n > 0 then
     vss = 0             ' 查找该会话的IP在数组中的序号
     do while vs(vss)<> vip and vss <= n
         vss = vss - 1
     loop
end if
if vss <= n then       ' 如果找到,
     if ipn(vss) > 1 then       ' 且计数值大于1,则计数值减1
         ipn(vss) = ipn(vss)-1
         Application("ipn")=ipn
     else              '    将当前数组中序号的项清除(把最后一项挪到这里来)
            vs(vss) = vs(n)
            ipn(vss) = ipn(n)
         n=n-1
         redim Preserve vs(n)
         redim Preserve ipn(n)
         Application("ipn")=ipn
         Application("vs")=vs
         Application("vss")=n
     end if
end if

 Application.UnLock
End Sub

 </script>


[ 本帖最后由 MrWolf 于 2014-5-5 20:56 编辑 ]
#14
chiron09212014-05-06 17:37
斑竹,求助!
1