分享你我的心得.
共乘一片美好网络.

使用 cookies 做一个简单计数器

主要是根据用户访问时间来判断,在一台计算机在一定时间之内的访问都不会被计数。而不理会用户是否关闭浏览器,是否更换IP地址。

说明:
1.为方便用户测试,我把判断时间设定为10秒,测试时,有详细的程序进程显示帮助理解
2.存成任意名字,放在任意目录下
3.计数器数据记录在2.asp这个文件中
4.需要FSO权限和用户允许cookies,无需数据库支持

思路如下:
        判断用户cookies是否存在(判断后写用户cookies为当前时间)
                 |          |
                存在         不存在
                 |          |                 
     判断cookies包含的用户访问时间是否过期   为用户添加cookies
     |                |     |
    过期              未过期   计数器计数
     |                |
  计数器计数            计数器不计数

代码拷贝框

以下是引用片段:

<STYLE type=text/css>
body {  font-family: "Tahoma"; font-size: 12px; text-decoration: none}
</STYLE>
<%
dim User_login,Count_Result,Count_Content,CompareDate
Count_Result="2.asp"                                    ‘这里设定记录计数器数据的文件名为2.asp
CompareDate=10                                          ‘设定比较时间,无单位
User_login=Request.Cookies("User_login")        ‘取得用户Cookies
If User_login="" Then                                    ‘如果cookies不存在,就赋予用户一个Cookies,并将计数器加一
    response.write "用户没有cookies,线在创建<p>"
    Call CreateCookies
    Call ModifyCount
Else
     response.write "用户cookies存在,现在去比较时间是否过期<p>"
     Call IndentifyDate
End If
    ‘Response.Redirect Count_Result

‘修改计数器文件
Sub ModifyCount
    If CheckFileExists(Count_Result)=1 Then      ‘计数器文件存在
            response.write "计数器文件存在,现在去增加计数器的数值<p>"
            Call AddCount
    ElseIf CheckFileExists(Count_Result)=0  Then  ‘计数器文件不存在就添加这个文件
            response.write "计数器文件不存在,现在区创建这个文件,并将记录设定为1<p>"
            Call CreateCount
    End If
End Sub

‘给计数器文件增加数值
Sub AddCount
          response.write "给计数器加一完毕<p>"
          Count_Content=CInt(ReadTextFile(Count_Result))+1    ‘读这个文件的内容and给count_result.asp加一
          Call SaveTextFile(Count_Result, Count_Content)
End Sub

‘创建计数器文件
Sub CreateCount
          response.write "创建文件完毕<p>"
          CreateFile(Count_Result)                      ‘创建文件
          Count_Content=1                               ‘计数器归零
          Call SaveTextFile(Count_Result, Count_Content)         
End Sub

‘判断cookies相差时间时间
Sub IndentifyDate
    If DateDiff("s",cDate(User_login), Now())>CompareDate  Then      ‘用户机上的cookies所记录的时间与当前相差是否超过10s’
         response.write "超过10秒,cookies已经过期,现在给计数器加一<p>"
         Call ModifyCount
    else
         response.write "短于10秒钟,没有过期,计数器不增长<p>"
    End If
response.write "现在给cookies重新赋予现在的时间"
    Call CreateCookies
End Sub

‘给用户创建一个新的cookies并赋值,设定cookies失效时间为1天
Sub CreateCookies
    Response.Cookies("User_login")=Now()
    Response.Cookies("User_login").Expires=date+1
End Sub

‘ 检查文件是否存在
Function CheckFileExists(strFile)
    Dim strTestFile, objFSO
    strTestFile = Server.Mappath(strFile)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ‘ 检查文件是否存在
    If objFSO.FileExists(strTestFile) Then
        CheckFileExists = 1
    Else
        CheckFileExists = 0
    End If
    Set objFSO = Nothing
End Function

‘写文件
Sub SaveTextFile(strFile, strFileInnew)
    Dim objFSO, objOutStream, strTestFile
    strTestFile = Server.Mappath(strFile)
    Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
    Set objOutStream = objFSO.OpenTextFile(strTestFile,2,True,False)
    objOutStream.WriteLine(strFileInnew)
    objOutStream.Close
    Set objOutStream = Nothing
    Set objFSO = Nothing
End Sub

‘  读文件的内容
Function ReadTextFile(strFile)
    Dim strTestFile, objFSO, objInStream
    strTestFile = Server.Mappath(strFile)
    Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
    Set objInStream = objFSO.OpenTextFile (strTestFile,1, False, False)
    ReadTextFile = objInstream.ReadALL
    objInStream.Close
    Set objInStream = Nothing
    Set objFSO = Nothing
End Function
Function CreateFile(strFile)
    Dim strTestFile, objFSO, objStream
    strTestFile = Server.Mappath(strFile)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If objFSO.FileExists(strTestFile) Then
        CreateFile = 0
    Else
        ‘ 新建文本文件
        Set objStream = objFSO.CreateTextFile(strTestFile, True)
        objStream.write(filecontent)
        CreateFile = 1
        Set objFile = Nothing
    End If
    Set objFSO = Nothing
End Function
%>

运行代码框

以下是引用片段:

<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> New Document </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Generator" content="EditPlus">
<meta name="Author" content="田耕">
<meta name="Keywords" content="">
<meta name="Description" content="">
<style type="text/css">
body,table,tr,td{
 font-size:12px;
 color:#000000;
 }
.sec1 {
    background-color: #99CC99;
    cursor: hand;
    color: #000000;
    border-left: 1px solid #FFFFFF;
    border-top: 1px solid #FFFFFF;
    border-right: 1px solid gray;
    border-bottom: 1px solid #FFFFFF
    }
.sec2 {
    background-color: #D4D0C8;
    cursor: hand;
    color: #000000;
    border-left: 1px solid #FFFFFF;
    border-top: 1px solid #FFFFFF;
    border-right: 1px solid gray;
    font-weight: bold;
    }
.main_tab {
    background-color: #D4D0C8;
    color: #000000;
    border-left:1px solid #FFFFFF;
    border-right: 1px solid gray;
    border-bottom: 1px solid gray;
    }
</style>

<script language="JavaScript">
<!–
function secBoard(n,x,y)
{
  for(i=0;i<secTable.cells.length;i++){
    secTable.cells[i].className="sec1";
  secTable.cells[n].className="sec2";}
  for(i=0;i<mainTable.tBodies.length;i++){
    mainTable.tBodies[i].style.display="none";
  mainTable.tBodies[n].style.display="block";}
  weizi.innerHTML="<b>"+x.toUpperCase()+"</b>展馆<b>"+y+"</b>楼展厅";
}
//–>
</script>
</head>

<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0">

<table width="588" border="0" cellspacing="1" cellpadding="4" align="center">
  <tr>
    <td width="82%">当前位置:展馆分布 &gt; <span id="weizi"><b>A</b>展馆<b>1</b>楼展厅</span></td>
    <td width="18%">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="2" height="1" bgcolor="#000000"></td>
  </tr>
  <tr>
    <td colspan="2" height="4"></td>
  </tr>
  <tr>
    <td colspan="2">

      <table border=0 cellspacing=0 cellpadding=0 width=578 id=secTable>
        <tr height=20 align=center>
          <td class=sec2 width=10% onClick="secBoard(0,’a’,’1′)">A展馆1楼展厅</td>
          <td class=sec1 width=10% onClick="secBoard(1,’a’,’2′)">A展馆2楼展厅</td>
          <td class=sec1 width=10% onClick="secBoard(2,’b’,’1′)">B展馆1楼展厅</td>
          <td class=sec1 width=10% onClick="secBoard(3,’b’,’2′)">B展馆2楼展厅</td>
          <td class=sec1 width=10% onClick="secBoard(4,’c’,’1′)">C展馆1楼展厅</td>
          <td class=sec1 width=10% onClick="secBoard(5,’c’,’2′)">C展馆2楼展厅</td>
        </tr>
      </table>
      <table border=0 cellspacing=0 cellpadding=0 width=578 height=160 id=mainTable class=main_tab>
        <tbody style="display:block;">
        <tr>
          <td align="center"><br>
            一<br>
          </td>
        </tr>
        </tbody> <tbody style="display:none;">
        <tr>
          <td align="center"><br>
            二<br>
          </td>
        </tr>
        </tbody> <tbody style="display:none;">
        <tr>
          <td align="center"><br>
            三<br>
          </td>
        </tr>
        </tbody> <tbody style="display:none;">
        <tr>
          <td align="center"><br>
            四<br>
          </td>
        </tr>
        </tbody><tbody style="display:none;">
        <tr>
          <td align="center"><br>
            五<br>
          </td>
        </tr>
        </tbody><tbody style="display:none;">
        <tr>
          <td align="center"><br>
            六<br>
          </td>
        </tr>
        </tbody>
      </table>
    </td>
  </tr>
</table>   
</body>
</html>

赞(0)
未经允许不得转载:小叶白龙博客 » 使用 cookies 做一个简单计数器
分享到: 更多 (0)

评论 2041

评论前必须登录!