聊天室实现私聊(一)

作者:网络之门

几个要好的网友在聊天室里闲聊的时侯,总会遇上有些话题是不想同一聊天室内别的聊友看见的,那么聊天室支持悄悄话功能将是什分有必要的了,实现悄悄话的方法很多,现在小虎介绍一下利用session对象来实现它,用session对象来实现悄悄话,是有优缺点的,因为session对象的应用,其实就是客户端cookies的使用。如果客户端cookies不支持或关闭了,那么程序运行起来就有问题了。那么使用session对象就没好处了吗??非也,至少在编程上大大减少了工作量嘛,试想一下如果需要保存该用户的聊天名字,那么使用session对象就能直接保存他的名字了,如果没有session对象。解决的方法看来就只有在处理发言的FORM里设几个隐含的textbox对象来保存,这样处理起来会比教烦锁,但好处是通用性广,就算浏览器不支持cookies仍然可用。

说到这里,大伙不妨试试网上众多的ASP聊天室,试把浏览器的安全选项(总是接受cookies关了)看看那个聊天室仍然正常地能使用。那个就问题百出来。。呵呵~~不要找小虎的聊天室来试哦....我的聊天室也需要cookies来支持的。不用session对象编程真是烦锁很多。而且大部分浏览器的安全配置的默认值是总是接受cookies。所以也不用太但心,只有少部分的用户是比教特别的。

现在从聊天室的发言开始,到处理发言,显示发言,一步一步地让大家了解一下是如何处理的,最后就加上悄悄话功能

首先,我们的聊天室主要提供如下元素:发言人(你的名字),动作(叫嚷,抱抱...等),对象(这句话是向谁说的呢?),发言内容等四大元素。

其中发言人(你的聊天名字)的名字是保存在发言FORM的user隐藏文本框中,这样每当发言的时侯,在处理发言的says.asp程序里,就可以用request.form("user")来取得聊天名字。而动作则是由下拉框action来提供的,你可以自定义很多的动作类型,以满足不同聊友的需要。而发言对象,也是由下拉框whoto来选定,这些名单是列出当前聊天室内所有用户的名称。如何判断有新用户进聊天室以及退出处理,这里先不说了。因为构造一个完整的聊天室要做的工作还是挺多的。最后由一个says文本框提供发言内容。

有了这几个主要的聊天元素。我们就可以进行发言处理了。

请看看下面的程序片段

'取得说话内容,并过滤其中的脚本语句
usersays=request.form("says")
if instr(usersays,"

  1<script")>0 then   
  2usersays=""   
  3end if   
  4  
  5'判断是否有谈话内容,没有的话就不作处理 
  6
  7if len(usersays)&lt;&gt;0 then   
  8session("whoto")=request.form("whoto")   
  9session("action")=request.form("action")   
 10if instr(usersays,chr(39))&gt;0 then   
 11usersays=replace(usersays,chr(39),"\"&amp;chr(39))   
 12end if   
 13if instr(usersays,chr(34))&gt;0 then   
 14usersays=replace(usersays,chr(34),"\"&amp;chr(34))   
 15end if   
 16  
 17application.lock   
 18  
 19'定义一个交谈缓冲区,后面将给大家仔细分析一下 
 20
 21dim chats(20)   
 22for n=1 to 20   
 23chats(n)=application("chats")(n)   
 24next   
 25username=request.Form("user")   
 26  
 27  
 28usertime=Time   
 29usertime="("&amp;right(usertime,8)&amp;")"   
 30user_whoto=request.Form("whoto")   
 31user_action=request.Form("action")   
 32if application("counter")&gt;19 then   
 33application("counter")=0   
 34end if   
 35'不是耳语就加一   
 36if request.form("action")&lt;&gt;"耳语" then   
 37application("counter")=application("zj_1counter")+1   
 38counter=application("zj_1counter")   
 39'用户的动作处理 
 40
 41select case request.FORM("action")   
 42case "说话"   
 43if request.FORM("whoto")="ALL" then   
 44chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> :<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 45else   
 46chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>与<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>说</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 47end if   
 48case "叫嚷"   
 49chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>冲<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>大叫</i>:<b><font color="#0000aa"> "&amp;usersays&amp;"</font></b><br/><br/>"   
 50case "亲亲"   
 51chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>亲了亲<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>的脸颊</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 52case "拥抱"   
 53chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>轻轻的抱着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font></i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 54case "暴怒"   
 55chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>朝<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>横眉竖目道</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 56case "轻推"   
 57chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>轻轻地推了推<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>的胳膊</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 58case "傻笑"   
 59chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>傻兮兮的朝<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>笑笑</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 60case "拳打"   
 61chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>对准<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>就是一拳</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 62case "脚踢"   
 63chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>凌空一腿踢在<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>脑袋上</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 64case "告戒"   
 65chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>拉着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>手语气心长地说</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 66case "耳光"   
 67chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>狠狠地掴了<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>几个耳光</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 68case "鞠躬"   
 69chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>毕恭毕敬地向<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>弯腰鞠躬</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 70case "歉意"   
 71chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>感到十二分的歉意,低声对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>说</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 72case "惊讶"   
 73chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>惊讶的对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>吐了吐舌头</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 74case "哈欠"   
 75chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>张大嘴巴,打了个哈欠</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 76case "微笑"   
 77chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>微微一笑</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 78case "握手"   
 79chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>紧紧的握住<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>的手</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 80case "耸肩"   
 81chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>对着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>耸耸双肩</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 82case "安慰"   
 83chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>拍拍<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>的肩膀,双眼关切的说</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 84case "生气"   
 85chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>气鼓鼓的嘟嘴对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>道</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 86case "大哭"   
 87chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>忍不住对着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>放声大哭</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 88case "抽泣"   
 89chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>双手捂着脸,对着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>呜呜咽咽的</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 90case "承诺"   
 91chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>对着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>把胸脯拍得噼啪响</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 92case "不舍"   
 93chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>依依不舍地拉着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>的衣角</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 94case "深情"   
 95chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>用深情的眼神,痴痴地看着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font></i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 96case "迷惑"   
 97chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>抓抓头皮看着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>露出迷惑的神情</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
 98case "不解"   
 99chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>用不可思意的眼神看着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font></i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
100case "幸灾"   
101chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>幸灾乐祸地对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>说</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
102case "大笑"   
103chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>对着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>捧腹大笑</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
104case "皱眉"   
105chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>皱着眉头对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font></i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
106case "委屈"   
107chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>很委屈地看着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>眼泪哗啦啦地往下流</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
108case "高兴"   
109chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>兴高采烈地对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>说</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
110case "沮丧"   
111chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>满脸沮丧地对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>说</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
112case "失望"   
113chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>垂头丧气地对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>说</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
114case "神经"   
115chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>神经兮兮地对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>说</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
116case "神秘"   
117chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>非常神秘地对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>说</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
118case "撒娇"   
119chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>拉着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>手撒娇</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
120case "鬼脸"   
121chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>对着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>做了个鬼脸</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
122case "无奈"   
123chats(counter)="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>对着<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>很无奈地</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
124end select   
125  
126'是耳语   
127else   
128  
129'耳语处理   
130application("chat")="<font color="blue">"&amp;usertime&amp;"</font> <font color="black">"&amp;username&amp;"</font> <i>悄悄地对<font color="#00bb00"> "&amp;request.FORM("whoto")&amp;" </font>耳语</i>:<font color="#0000aa"> "&amp;usersays&amp;"</font><br/><br/>"   
131'对谁说   
132application("chatto")=request.FORM("whoto")   
133'说话的人   
134application("owner")=username   
135session("chat")="true"   
136end if   
137  
138  
139'谈话全局化   
140application("chats")=chats   
141  
142  
143application.unlock   
144  
145  
146end if 
147
148上面的程序是把用户的发言和动作以及说话对象生成html语句并保存起来。用以后面的在聊天室中显示出来,其中请大家注意一下耳语是保存在application("chat")这个全局应用程序对象中的。好了,下节先为大家详细分析一下说话的内容是如何处理。</script")>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus