精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>网络专区>>● 网站建设>>前人指路 — 老站长如是说>>实现聊天室的悄悄话功能(上)

主题:实现聊天室的悄悄话功能(上)
发信人: tedz()
整理人: eagle(2000-12-24 10:00:39), 站内信件
 
实现聊天室的悄悄话功能(上) 
作者:网络之门 
  几个要好的网友在聊天室里闲聊的时侯,总会遇上有些话题是不想同一聊天
室内别的聊友看见的,那么聊天室支持悄悄话功能将是什分有必要的了,实现悄
悄话的方法很多,现在小虎介绍一下利用session对象来实现它,用session对象
来实现悄悄话,是有优缺点的,因为session对象的应用,其实就是客户端cooki
es的使用。如果客户端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,"<script")>0 then
usersays=""
end if

'判断是否有谈话内容,没有的话就不作处理 
if len(usersays)<>0 then
session("whoto")=request.form("whoto")
session("action")=request.form("action")
if instr(usersays,chr(39))>0 then
usersays=replace(usersays,chr(39),"\"&chr(39))
end if
if instr(usersays,chr(34))>0 then
usersays=replace(usersays,chr(34),"\"&chr(34))
end if

application.lock

'定义一个交谈缓冲区,后面将给大家仔细分析一下

dim chats(20)
for n=1 to 20
chats(n)=application("chats")(n)
next
username=request.Form("user")


usertime=Time
usertime="("&right(usertime,8)&")"
user_whoto=request.Form("whoto")
user_action=request.Form("action")
if application("counter")>19 then
application("counter")=0
end if
'不是耳语就加一
if request.form("action")<>"耳语" then
application("counter")=application("zj_1counter")+1
counter=application("zj_1counter")
'用户的动作处理

select case request.FORM("action")
case "说话" 
if request.FORM("whoto")="ALL" then
chats(counter)=""&usertime&" >"&username&" : "&usersays&"<BR><BR>

else
chats(counter)=""&usertime&" >"&username&" &nbsp;"&request.FORM("wh
oto")&" 
: "&usersays&"<BR><BR>
"
end if
case "叫嚷" 
chats(counter)=""&usertime&" >"&username&" &nbsp;"&request.FORM("wh
oto")&" 
大叫
: "&usersays&"><BR><BR>"
case "亲亲" 
chats(counter)=""&usertime&" >"&username&" 亲了亲&nbsp;"&request.FORM
("whoto")&" 
的脸颊
: "&usersays&"
<BR><BR>"
case "拥抱" 
chats(counter)=""&usertime&" >"&username&" 轻轻的抱着&nbsp;"&request.
FORM("whoto")&" 
: "&usersays&"<B
R><BR>"
case "暴怒" 
chats(counter)=""&usertime&" >"&username&" &nbsp;"&request.FORM("wh
oto")&" 
横眉竖目道
: "&usersays&"
<BR><BR>"
case "轻推" 
chats(counter)=""&usertime&" >"&username&" 轻轻地推了推&nbsp;"&reques
t.FORM("whoto")&" 
的胳膊
: "&usersays&"<
/font><BR><BR>"
case "傻笑" 
chats(counter)=""&usertime&" >"&username&" 傻兮兮的朝&nbsp;"&request.
FORM("whoto")&" 
笑笑
: "&usersays&"</fon
t><BR><BR>"
case "拳打" 
chats(counter)=""&usertime&" >"&username&" 对准&nbsp;"&request.FORM("
whoto")&" 
就是一拳
: "&usersays&"
<BR><BR>"
case "脚踢" 
chats(counter)=""&usertime&" >"&username&" 凌空一腿踢在&nbsp;"&reques
t.FORM("whoto")&" 
脑袋上
: "&usersays&"<
/font><BR><BR>"
case "告戒"
chats(counter)=""&usertime&" >"&username&" 拉着&nbsp;"&request.FORM("
whoto")&" 
手语气心长地说
: "&usersays&"<
/font><BR><BR>"
case "耳光" 
chats(counter)=""&usertime&" >"&username&" 狠狠地掴了&nbsp;"&request.
FORM("whoto")&" 
几个耳光
: "&usersays&"<
/font><BR><BR>"
case "鞠躬" 
chats(counter)=""&usertime&" >"&username&" 毕恭毕敬地向&nbsp;"&reques
t.FORM("whoto")&" 
弯腰鞠躬
: "&usersays&
"
<BR><BR>"
case "歉意" 
chats(counter)=""&usertime&" >"&username&" 感到十二分的歉意,低声对&n
bsp;"&request.FORM("whoto")&" 
: "&use
rsays&"
<BR><BR>"
case "惊讶" 
chats(counter)=""&usertime&" >"&username&" 惊讶的对&nbsp;"&request.FO
RM("whoto")&" 
吐了吐舌头
: "&usersays&"<
/font><BR><BR>"
case "哈欠" 
chats(counter)=""&usertime&" >"&username&" &nbsp;"&request.FORM("wh
oto")&" 
张大嘴巴,打了个哈欠
: "&usersay
s&"
<BR><BR>"
case "微笑" 
chats(counter)=""&usertime&" >"&username&" &nbsp;"&request.FORM("wh
oto")&" 
微微一笑
: "&usersays&"<B
R><BR>"
case "握手" 
chats(counter)=""&usertime&" >"&username&" 紧紧的握住&nbsp;"&request.
FORM("whoto")&" 
的手
: "&usersays&"</fon
t><BR><BR>"
case "耸肩" 
chats(counter)=""&usertime&" >"&username&" 对着&nbsp;"&request.FORM("
whoto")&" 
耸耸双肩
: "&usersays&"
<BR><BR>"
case "安慰" 
chats(counter)=""&usertime&" >"&username&" 拍拍&nbsp;"&request.FORM("
whoto")&" 
的肩膀,双眼关切的说
: "&users
ays&"
<BR><BR>"
case "生气" 
chats(counter)=""&usertime&" >"&username&" 气鼓鼓的嘟嘴对&nbsp;"&requ
est.FORM("whoto")&" 
: "&usersays&"</f
ont><BR><BR>"
case "大哭" 
chats(counter)=""&usertime&" >"&username&" 忍不住对着&nbsp;"&request.
FORM("whoto")&" 
放声大哭
: "&usersays&"<
/font><BR><BR>"
case "抽泣" 
chats(counter)=""&usertime&" >"&username&" 双手捂着脸,对着&nbsp;"&re
quest.FORM("whoto")&" 
呜呜咽咽的
: "&use
rsays&"
<BR><BR>"
case "承诺" 
chats(counter)=""&usertime&" >"&username&" 对着&nbsp;"&request.FORM("
whoto")&" 
把胸脯拍得噼啪响
: "&usersays&
"
<BR><BR>"
case "不舍" 
chats(counter)=""&usertime&" >"&username&" 依依不舍地拉着&nbsp;"&requ
est.FORM("whoto")&" 
的衣角
: "&usersays&
"
<BR><BR>"
case "深情" 
chats(counter)=""&usertime&" >"&username&" 用深情的眼神,痴痴地看着&n
bsp;"&request.FORM("whoto")&" 
: "&users
ays&"
<BR><BR>"
case "迷惑" 
chats(counter)=""&usertime&" >"&username&" 抓抓头皮看着&nbsp;"&reques
t.FORM("whoto")&" 
露出迷惑的神情
: "&use
rsays&"
<BR><BR>"
case "不解" 
chats(counter)=""&usertime&" >"&username&" 用不可思意的眼神看着&nbsp;
"&request.FORM("whoto")&" 
: "&usersays&
"
<BR><BR>"
case "幸灾" 
chats(counter)=""&usertime&" >"&username&" 幸灾乐祸地对&nbsp;"&reques
t.FORM("whoto")&" 
: "&usersays&"</fon
t><BR><BR>"
case "大笑" 
chats(counter)=""&usertime&" >"&username&" 对着&nbsp;"&request.FORM("
whoto")&" 
捧腹大笑
: "&usersays&"
<BR><BR>"
case "皱眉" 
chats(counter)=""&usertime&" >"&username&" 皱着眉头对&nbsp;"&request.
FORM("whoto")&" 
: "&usersays&"<B
R><BR>"
case "委屈" 
chats(counter)=""&usertime&" >"&username&" 很委屈地看着&nbsp;"&reques
t.FORM("whoto")&" 
眼泪哗啦啦地往下流
: "
&usersays&"
<BR><BR>"
case "高兴" 
chats(counter)=""&usertime&" >"&username&" 兴高采烈地对&nbsp;"&reques
t.FORM("whoto")&" 
: "&usersays&"</fon
t><BR><BR>"
case "沮丧" 
chats(counter)=""&usertime&" >"&username&" 满脸沮丧地对&nbsp;"&reques
t.FORM("whoto")&" 
: "&usersays&"</fon
t><BR><BR>"
case "失望" 
chats(counter)=""&usertime&" >"&username&" 垂头丧气地对&nbsp;"&reques
t.FORM("whoto")&" 
: "&usersays&"</fon
t><BR><BR>"
case "神经" 
chats(counter)=""&usertime&" >"&username&" 神经兮兮地对&nbsp;"&reques
t.FORM("whoto")&" 
: "&usersays&"</fon
t><BR><BR>"
case "神秘" 
chats(counter)=""&usertime&" >"&username&" 非常神秘地对&nbsp;"&reques
t.FORM("whoto")&" 
: "&usersays&"</fon
t><BR><BR>"
case "撒娇"
chats(counter)=""&usertime&" >"&username&" 拉着&nbsp;"&request.FORM("
whoto")&" 
手撒娇
: "&usersays&"<B
R><BR>"
case "鬼脸" 
chats(counter)=""&usertime&" >"&username&" 对着&nbsp;"&request.FORM("
whoto")&" 
做了个鬼脸
: "&usersays&"</fon
t><BR><BR>"
case "无奈" 
chats(counter)=""&usertime&" >"&username&" 对着&nbsp;"&request.FORM("
whoto")&" 
很无奈地
: "&usersays&"
<BR><BR>"
end select

'是耳语
else

'耳语处理
application("chat")=""&usertime&" <font color=
black>"&username&"
 悄悄地对&nbsp;"&reque
st.FORM("whoto")&" 
耳语
: "&usersays&"</
font><BR><BR>"
'对谁说
application("chatto")=request.FORM("whoto")
'说话的人
application("owner")=username
session("chat")="true"
end if


'谈话全局化
application("chats")=chats


application.unlock


end if

 
  上面的程序是把用户的发言和动作以及说话对象生成html语句并保存起来。
用以后面的在聊天室中显示出来,其中请大家注意一下耳语是保存在applicatio
n("chat")这个全局应用程序对象中的。好了,下节先为大家详细分析一下说话的
内容是如何处理。 
 
 
 
  

--
你的微笑象春天
春天嫩得象豆腐

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.130.2.217]

[关闭][返回]