asp.net web网站的开发中,用户的在线状态怎么实时更新

在web.configsessionstate的mode=stateserver(global.asax的session_onend函数无法使用,asp.net也没有类似... 在web.config sessionstate的mode=stateserver(global.asax的session_onend函数无法使用,asp.net也没有类似jsp的session监听器)时,其中一种情况,用户session超时后在哪更改用户表的online字段,另一种情况是用户关闭浏览器,在哪更改用户表的online字段,该做出怎么样处理呢,希望懂的朋友帮下忙哈!谢了
asp.net中怎么捕捉用户的请求(java中用post、get和servlet可以实现)和计算用户多长时间未进行请求
展开
 我来答
main828
2010-12-27 · TA获得超过160个赞
知道小有建树答主
回答量:149
采纳率:0%
帮助的人:177万
展开全部
一、原理
在.net中的global.asax中有Application_AuthenticateRequest事件和Application_BeginRequest事件是在每次访问aspx文件都会触发。但是Application_BeginRequest中不能对已经经过FROMS身份验证的身份ticket票进行识别。所以只能放到Application_AuthenticateRequest中去。

我的实现原理是:每次访问aspx文件时候都会判断在线表里面是否有这个用户(已经登录了的记录用户名,没有登录的记录IP地址),如果不存在,则将该用户的身份、最后访问时间、最后访问IP、和最后访问的URL存入数据库。如果数据库中已经曾在,则更新该记录,把最后访问时间,IP以及最后访问URL更新。

同时,删除数据库中与当前时间间隔20分钟以上的数据(20分钟没操作当为超时)。

二、优点
这样,你不仅仅可以看到当前在线的准确人数,还知道是那些人在线,以及是否登陆,和访问人数中已经是会员的比例,以及所在位置,并计算某个页上的人数。

三、数据库结构:
主键 字段 类型 长度 是否为空说明
1uson_serialint40序号
0uson_uservarchar200用户名(没登陆则为IP)
0uson_companyvarchar1000公司名(没登陆则为 '游客 ')
0uson_ip varchar200IP地址
0uson_datedatetime80最后操作时间
0uson_urlvarchar1000最后操作页面路径

四、程序
注意:
1、程序位于global.asax中
2、我是使用的FORMS身份验证
3、请using System.Web.Security

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
string strUserID = string.Empty;
string strCompany = string.Empty;
if (Request.IsAuthenticated)
{
FormsIdentity identity = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = identity.Ticket;
strUserID = User.Identity.Name;
strCompany = ticket.UserData.Split( "| ".ToCharArray())[2];
}
else
{
strUserID = Request.UserHostAddress;
strCompany = "游客 ";
}

MemberOnlineInfo objOnline = new MemberOnlineInfo(strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany);

MemberAccount account = new MemberAccount();
if (!account.CheckUserOnline(strUserID))
account.AddOnline(objOnline);
else
account.UpdateOnline(objOnline);

//删除超时的会员
account.DeleteOnline();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lllcui
2010-12-23 · TA获得超过222个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:111万
展开全部
在global.asax里控制,
void Session_Start(object sender, EventArgs e)
{
//在新会话启动时运行的代码

}

void Session_End(object sender, EventArgs e)
{
//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。

}
关闭浏览器可以用javascript。判断。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaosabocai
2010-12-22
知道答主
回答量:9
采纳率:0%
帮助的人:6.7万
展开全部
在我们网站的application中存放的啊。
你可以试试这样。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式