ASP.NET 使用application与session对象写的简单聊天室程序

ASP.NET 使用application与session对象写的简单聊天室程序

写了快一年的ASP.NET,应用程序对象还真没怎么用过。看了看书,根据这两个对象的特性写了一个简单的聊天室程序。真的是非常的简陋

ASP .网中有两个重要的对象,一个是应用对象,一个是会议对象。

应用:记录应用程序参数的对象,该对象用于共享应用程序级信息。

会话:记录浏览器端的变量对象,用来存储跨网页程序程序的变量或者对象。

说实话,写了快一年的ASP.NET,应用程序对象还真没怎么用过。看了看书,根据这两个对象的特性写了一个简单的聊天室程序。真的是非常的简陋。

我的思路是,有两个页面默认页和聊天室页,页面布局如图:

默认页:

聊天室页:

思路大概就是,在默认页登录时,输入的昵称存入会议对象当中,并跳转到聊天室页,并把会议中存的键为"昵称"存入应用对象中去。遍历应用对象,给左侧的列表框添加在线人的昵称。利用应用程序对象在会话_开始和会话_结束方法中对键为"计数"进行1,-1用于记录当前在线人数。在利用应用对象键为"内容"存储聊天记录。

下面上代码

Global.asax:

复制代码代码如下:

受保护的空的应用程序启动(对象发送方,EventArgs e)

{

应用程序[ count ]=0;

应用程序[内容]=聊天记录 n ;

}

受保护的void Session_Start(对象发送方,事件参数e)

{

申请. lock();

Application[ count ]=(int)Application[ count ]1;

申请. UnLock();

}

受保护的void Session_End(对象发送方,事件参数e)

{

申请. lock();

Application[ count ]=(int)Application[ count ]-1;

申请. UnLock();

}

Default.aspx:

复制代码代码如下:

受保护的void button_login_Click(对象发送方)

{

如果(!字符串IsNullOrEmpty(textbox_nickname .正文))

{

会话[昵称]=文本框昵称.文本;

}

回应。重定向(‘聊天室。aspx’);

}

ChatRoom.aspx:

复制代码代码如下:

受保护的void Page_Load(对象发送方,EventArgs e)

{

标签_计数. Text=当前在线人数为应用程序[计数]。ToString()人;

如果(!IsPostBack)

{

如果(会话[昵称]!=空)

{

申请。添加(会话[昵称]。ToString()、Session[昵称]);

}

文本框_记录. Text=应用程序[内容]。ToString();

}

列表框_用户名1000个项目。clear();

foreach(字符串应用程序中的字符串。内容)

{

如果(!海峡。等于(内容)!海峡。等于(‘计数’)!海峡。等于(名称))

{

列表框_用户名1000个项目。添加(新的列表项(应用程序[str]。ToString(),应用程序[str].ToString()));

}

}

}

受保护的void按钮_发送_点击(对象发送方)

{

如果(会话[昵称]!=空)

{

应用程序[内容]=(会话[昵称])。ToString()说: textbox_sendmsg .文本 n’);

文本框_记录. Text=应用程序[内容]。ToString();

}

}

受保护的void按钮_退出_点击(对象发送方)

{

申请。删除(会话[昵称]。ToString());

Application[ count ]=(int)Application[ count ]-1;

回应。重定向( web计数器。aspx’);

}

这样简单的聊天室就完成了,在本地使用的时候,在一个浏览器下好像不会创建新的会话,需要在不同浏览器下登录才能看到效果。

这里也要注意一点就是,在退出聊天室的时候,要把应用键为"昵称",即当前会话["昵称"]的值给去除掉。否则刷新列表框的时候,会发现退出的昵称还存在。

同时也要把键为"计数"的应用对象-1,也许你要问,不是在会话_结束方法中已经-1了么?这块我还真不确定,可能是有两个原因,不知道是哪个?希望明白的朋友给予指点。

1.会话尚未过期。我只是在应用程序中用相应的key session杀死了对象,但没有清除真正的session。所以不会调用Session_End方法。(但也许你会问,清空当前会话[“昵称”]对象不就可以了吗?我试过这个,但是count没有-1。)

2.是因为我是在两个不同的本地浏览器做这个聊天操作吗?

在一些特殊情况下,使用application对象确实对我们有帮助,所以我就不用说session了,session肯定是我们经常使用的。

ASP.NET 使用application与session对象写的简单聊天室程序