本程序搭建在IIS上,使用asp语言编码。
阅读本文首先要掌握的知识:
ASP、VBScript基本语法,Session和Application对象的概念。
本程序分为5个文件,分别为index.asp,chat.asp,input.asp,exit.asp,main.asp,Global.asa。
注:使用Global.asa时要创建应用程序而不是虚拟目录。
本程序的功能为实现多人聊天,可选择不同的字体和颜色进行发送。同时显示在线人数、总人数、在线用户名、所有用户名。(用户名为难点)。
本文对记录用户名的实现做以详细介绍。
首先asp中不同页面的变量是不能够相互传递的,可以用Application和Session来实现变量的传递。而Application记录所有用户的信息,Session记录单一用户的信息,二者结合即可记录在线用户名和所有用户名。
实现方式:
Global.asa:
<Script language="VBScript" runat="server">
Sub Application_Onstart
Dim all_un(100), online_un(100) '存储用户名
for i=0 to 99
all_un(i)=""
online_un(i)="" '初始化
next
Application.lock
Application("all_un") = all_un
Application("online_un") = online_un
Application("all") = 0 'all_un下标
Application("online") = 0 'online_un下标
Application("onlinen") = 0 '在线人数 注意:在线人数不等于online_un的下标
Application.Unlock
End Sub
'进入index.asp时Session便已加载,但此时用户未登录,故不能在此时写逻辑代码
Sub Session_OnEnd
Dim online_un, online
online_un = Application("online_un")
online = Session("now")
online_un(online) = "" '如果退出则将当前用户下标所处的online_un设置为空字符
Application.LOCK
Application("online_un") = online_un
Application("onlinen") = Application("onlinen") - 1 '如果退出则在线人数减一
Application.Unlock
End Sub
</Script>
index.asp:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<title>登录</title>
<%
Session.Timeout=2
IF Session("user") <> "" THEN '如果是从exit.asp过来的则Session("user")不为空,将此Session重置
Session("user") = ""
Session.Abandon '废除session
END IF
Session("flag")=0 '用于记录是否登录,便于在chat.asp中判断
%>
</head>
<body>
<form action="chat.asp" method="POST">
昵称:
<input type="text" name="name">
<input type="submit" name="login" value="登录">
</form>
</body>
</html>
chat.asp:
<%
Dim all_un, all, online_un, online,name
all = Application("all")
online = Application("online")
IF Session("flag")=0 THEN '如果是从index.asp过来的则flag为0,执行以下代码
name = Request("name")
Application.lock
Application("all") = Application("all") + 1
Application("online") = Application("online") + 1
Application("onlinen") = Application("onlinen") + 1
Application.Unlock
Session("user") = name
all_un = Application("all_un")
online_un = Application("online_un")
IF online_un(online) = "" THEN
online_un(online) = name
Application.lock
Application("online_un") = online_un
Application.unlock
Session("now") = online '记录当前用户的下标
END IF
IF all_un(all) = "" THEN
all_un(all) = name
Application.lock
Application("all_un")=all_un
Application.unlock
END IF
Session("flag")=1 '用户登记之后则flag设置为1,当刷新时便不会重新登记用户信息
END IF
%>
<div class="message">
<iframe src="main.asp"></iframe>
</div>
<div class="data">
<p>
当前在线人数:<%=Application("onlinen")%>
<br>
<%for i=0 to Application("online")%>
<%=Application("online_un")(i)%>
<%next%>
<br>
总人数:<%=Application("all")%>
<br>
所有用户名:
<%for i=0 to Application("all")%>
<%=Application("all_un")(i)%>
<%next%>
</p>
</div>
<div class="input">
<iframe src="input.asp"></iframe>
</div>
</body>
input.asp:
<body>
<%
Dim user
user = Session("user")
str = Application("message")
%>
<form>
昵称:<%=user%>发言:<input type="text" name="message">
<input type="radio" name="color" value="red">红</input>
<input type="radio" name="color" value="blue">蓝</input>
<input type="radio" name="color" value="green">绿</input>
<br>
<input type="radio" name="font" value="黑体">黑体</input>
<input type="radio" name="font" value="宋体">宋体</input>
<input type="radio" name="font" value="微软雅黑">微软雅黑</input>
<br>
<input type="submit" name="submit" value="发送">
<a href="exit.asp" target="_parent">exit</a>
</form>
<%
IF Request("message") <> "" Then
str = str & "<span style='color:"& Request("color") &";font-family:" & Request("font")& "'>"& user & ":" & Request("message") & Date & "</span><br>"
'简单的字符串拼接
Application.lock
Application("message") = str
Application.unlock
End If
%>
</body>
</html>
main.asp:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title></title>
<meta charset="utf-8">
<meta http-equiv="refresh" content="2">
</head>
<body>
<%
Dim message
message = Application("message")
%>
<p><%=message%></p>
</body>
</html>
exit.asp:
<%
Response.Redirect "index.asp"
%>
总结:Application负责记录总体数据,Session负责记录单个用户的数据,虽然这样实现起来很麻烦,但能加深对这两个概念的理解。