ASP.NET在线用户列表续(理想方法)
续上一帖子(会话期内的处理)
设计思路:用户在会话期内离开网站一次性异步提交到服务器-处理列表。
实现:写一个js,通过cookie维护一个打开页面的记数器,完全在客户端处理
页面onload;cookie["VISIPAGECOUNT"] +1
页面onunload;cookie["VISIPAGECOUNT"] -1
这样在每个页面加载和卸载时在客户端各处理一次。
if VISIPAGECOUNT=0
{
xmlhttp处理----------用户离线(更新数据库在线标记)
}
优点:
页面只包含一个很小的js文件,不需要更改页面,完全基于客户端。
一次异步提交,最大限度的减小网络负担
与数据库结合,不用在服务器端维护一个大在线集合(上文中的朋友提出static HashTbale,镜像站点或者万级以上难于维护……,还有就是服务器掉电……)
缺点:
需要用户打开cookie(变通方法在客户端写文本文件顺便把用户信息记录在内)
用户意外掉电掉线,只有到session_end结束时自动处理
欢迎大家指正探讨!