asp.net c# 中离开页面时,对Application进行操作

我的聊天室要用Application记录当前在线人数
我在Page_Load事件里面把Application自加了,用户离开聊天室(离开当前页)要让Application自减,但是asp.net c#里面没有page_unload事件
网上有的说要从写什么类,我没找到从写的方法,
<body>里面有个onunload但是它是调用js的,没法调用CS文件内的过程啊?
有朋友说用js和ajax,我不会写,希望高手帮忙!
Page_Load事件主要代码如下:
if (!IsPostBack)
{
Application.Lock();
Application["atchar"] = Application["atchar"] + " " + Convert.ToString(Session["username"]).Trim();
Application["atcharnum"] = Convert.ToString(Convert.ToInt32(Application["atcharnum"]) + 1);
Application.UnLock();
}
有个情况说明一下,开始我想用用户的session的开始结束事件来判断他是否在线
但是这个用户也许session没有结束,只是离开了聊天室页面了,我也要认为他不在线,更改app的值

其实我觉得lz想做聊天室就要使用Global.asax这个文件,右键你的项目,添加新项.找到Global.asax,然后里面有如下事件
protected void Application_Start ( object sender, EventArgs e )
{
//应用程序开启.当应用程序第一次被任何用户访问,执行该方法.这个里面定义那个Application["atchar"],而不是为某个页面去定义Application["atchar"]
}

protected void Session_Start ( object sender, EventArgs e )
{
// 当一个用户进来, 就是开启浏览器访问应用程序时调用.
Application.Lock();
Application["atcharnum"] = Convert.ToString(Convert.ToInt32(Application["atcharnum"]) + 1);
Application.UnLock();
}

protected void Session_End ( object sender, EventArgs e )
{
// 浏览器/服务器进程被关闭执行该方法. 就是lz说的unload
Application.Lock();
Application["atcharnum"] = Convert.ToString(Convert.ToInt32(Application["atcharnum"]) - 1);
Application.UnLock();
}

protected void Application_End ( object sender, EventArgs e )
{
// 应用程序被关闭时调用.
}

用这个的好处就是整个应用程序任何一页被访问都会先执行Global.asax
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-09-02
<script language="javaScript" type="text/javascript">
window.onunload=function removeline(){
if(event.clientX<0&&event.clientY<0)
{
//alert('w');//<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>onbeforeunload//onunload
document.write('<iframe width="100" height="100" src="delesession.aspx"></iframe><OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>');
document.all.WebBrowser.ExecWB(45,1);
}
}
</script>
--------------
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public partial class delesession : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

DataTable dtOnline = (DataTable)Application["UserOnline"];
foreach (DataRow drUser in dtOnline.Rows)
{
if (drUser["UserID"].ToString() == Session["UserID"].ToString())
{
//用户和IP相同,删除在线
drUser.Delete();
}
}

dtOnline.AcceptChanges();
//解锁Application
Application.UnLock();
Session.Clear();
Response.Write("<script>window.close();</script>");
Response.End();

}
}
第2个回答  2009-09-09
使用缓存就可以了。统计缓存中的人数,隔一段时间进行一次扫描,能都得到比较准确的在线人数。

具体的你可以看看这个,也许对你有帮助。
http://hi.baidu.com/xwxxl_81/blog/item/390072943a832618d21b70ec.html

说到的比较类似,你自己需要变通一下。
第3个回答  2009-09-03
把数据插入数据库,然后在application_start事件中开启一个线程或定时器来监测用户在所长时间没有发出请求,从而进行相应的处理,具体的还是自己想
第4个回答  2009-09-02
不错的

asp.net c# 中离开页面时,对Application进行操作
\/\/应用程序开启.当应用程序第一次被任何用户访问,执行该方法.这个里面定义那个Application["atchar"],而不是为某个页面去定义Application["atchar"]} protected void Session_Start ( object sender, EventArgs e ){ \/\/ 当一个用户进来, 就是开启浏览器访问应用程序时调用.Application.Lock();Applicat...

ASP.NET C#关闭页面引发什么事件??
\/\/这里面填写你需要的操作的代码,当页面结束的时候系统会自动调 \/\/用这个方法来执行你需要的服务器端的操作!\/\/也就是在这里写你需要删除的相关数据库中的数据的代码 } } 注意:在使用的时候请把你当前的页面继承与这个自定义的页面 如果使用全局文件Global.asax来处理的话,当然你上面需要的功能也...

C# 关闭网页时执行程序的函数?相对于page_load 加分
服务器端没有对应事件,所以如果非要用就如LS那位写JS的朋友,但是如果你非得去调服务器端代码的话你可以添加一个隐藏控件,然后在onbeforeunload()里去CLICK一下隐藏控件从而回传到服务器去执行你要的代码...把你要执行的代码写在hidenButton_Clicked()中就可以实现.function window.onbeforeunload(){...

c#中application的作用?与session有什么区别?
这位朋友,您好,你是学C#的呀,我也是,现在我们学到asp.net的项目开发了,你的这个问题我原来也不是很明白,通过问老师终于明白了,他们的区别就是:Application对象和Session对象都是asp.net的内置对象。1. Application对象是表示用来保存所有用户(浏览器)共享的数据,直到Web服务器或pc关闭为止。共享的...

asp.net(c#)如何实现关闭浏览器时消除session
好像不能,只能等待session超时之后。。原因:1:服务器端无法检测到用户对浏览器的操作,服务器端虽然有Session_End事件,但是这个事件并不是浏览器关闭的时候触发...还是要等到session超时才出发。2:虽然JavaScript可以检测到浏览器的关闭,但是却不能检测出本网站的其他页面是否关闭,况且客户端远比我们...

在asp.net c#网页中,请问从数据库取出一个值,并选中相应的Input(radio...
在asp.net中控件分成html和服务器控件,你如果只是使用html控件的话,在后台代码中是无法访问到这个控件的,你可以在这个控件上右键选择在服务器运行,这样就可以在代码修改这个控件的值了。在页面的onload事件中加入代码,读取数据库的内容并设置那个控件的值(控件的ID.Text=值)当然,如果你坚持使用html...

在ASP.NET(C#)中,return的作用是什么,是退出当前过程,还是退出网页的所 ...
当你的函数类型是void时,也就是表示无返回类型,那么return表示的意义是退出该函数,返回调用该函数的那部分代码。但是当你的函数类型是int, double等时,那么return返回的值也要对应,例如一个int类型的函数,那么你在return时就应该return parm; 此时这个parm的类型必须是int型的,其他同理,那么return...

asp.net(C#) 怎么让Response.Redirect重新打开一个页面
在后台输出js打开就行了,类似于 string url="PersonPost.aspx?name=" + lblName.Text;Respose.Write("window.open('"+ url+"');");

asp.net(c#) 页面刷新时dropdownlist的问题
两个办法:1.在Page_Load这个里面加上 if(isPostBack){ 重新绑定dropdownlist } 2.用AJAX控制分页时只刷新DataList

ASP.NET (C#)如何在其他的页面得到登录页面的用户名
登录用户名";\/\/cookies值logincookie .Expires=DateTime.MaxValue; \/\/这个是设置cookies有效时间,你可以随意设置Response.Cookies.Add(logincookie );\/\/保存\/\/读取if (Request.Cookies["username"]!=null){ label.Text = Request.Cookies("userName").Value; \/\/读取cookies往你label上赋值} ...

相似回答
大家正在搜