请教asp.net 离线百度地图用户的在线离线判断

asp.net下判断用户什么时候离开,以什么方式离开
字体:[ ] 类型:转载 时间:
站点用户统计是每一个站点比有得功能,但是很少有人实现在线用户统计得绝对精确或者说是相对精确,基于Web得原理,服务器不会主动知道用户通过关闭浏览器离开站点,这时候只能依靠服务器端变量Session得过期来判断用户是否离开,但用户浏览器是可以知道自己何时关闭得,代码也非常简单&
function&body_onunload()&
&&&if(window.event.clientX&0)&
&&&&&&&&&&alert('the&broswer&is&closing...');&
&&&&&&&&&alert('the&user&is&refreshing&or&navigating&away...);&
以上代码就会判断用户是关闭浏览器还是刷新或者导航到其他页面了!&
---------------------------------------------------------------------------------------------------&
下午的时候,用代码测试了一下,主要是利用上面的js函数,结合ajax技术,由于对ajax技术了解的不是很透彻,前后尝试了三次。&
现将尝试结果与大家分享,大家也多给点意见&
首先我尝试了在ajax方法中访问Application,企图用Application变量来记录在线人数。尝试代码:&
[AjaxPro.AjaxMethod]&
&&public&int&Logoff()&&
&&&&&&&Application[&onlineCount&]=Convert.ToInt32(Application[&onlineCount&])-1;&
&&&&&&return&&&&&&Convert.ToInt32(Application[&onlineCount&]);&
尝试失败!估计是ajax不能访问应用程序的静态变量和Application变量。第一次使用AjaxPro不知道如何设置可以访问Session,以前使用的是ajax.dll,设置成可以读写Session,尝试结果可能发生改变!&
第二种我尝试了用文本文件记录在线人数,仍然失败!&
第三中,采用数据库!尝试成功。&
代码如下:&
[AjaxPro.AjaxMethod]&
&&public&int&Logoff()&&
&&&SqlConnection&conn&=&new&&SqlConnection(&server=.;database=&uid=pwd=123&);&
&&&SqlCommand&cmd&=&new&SqlCommand(&update&OnlineCount&set&num=num-1&,conn);&
&&&&conn.Open();&
&&&&cmd.ExecuteNonQuery();&
&&&catch(Exception&ex)&
&&&&EventLog.WriteEntry(ex.Source,ex.Message);&
&&&finally&
&&&&conn.Close();&
&&&cmd&=&new&SqlCommand(&select&top&1&num&from&OnlineCount&,conn);&
&&&&conn.Open();&
&&&&return&Convert.ToInt32(cmd.ExecuteScalar());&
&&&catch(Exception&ex)&
&&&&EventLog.WriteEntry(ex.Source,ex.Message);&
&&&finally&
&&&&conn.Close();&
&&&return&0;&
前台页面缩&
&1&&&&&script&language=&javascript&&&
&3&&&&&&&function&leave()&&
&4&&&&&&&{&&
&5&&&&&&&&&&alert(window.event.clientX);&
&6&&&&&&&&&&if(window.event.clientX&0)&
&7&&&&&&&&&&{&
&8&&&&&&&&&&&&WebApplication3.WebForm1.Logoff().&
&9&&&&&&&&&&}&
10&&&&&&&}&
12&&&&&&&&&/script&&
13&&&&&/HEAD&&
14&&&&&body&onunload=&leave()&&&
这样的话,在对安全行和及时性要求比较严格的情矿下,将一个页面设置为主页面,如果该页面关闭,表示用户已经退出。电子邮件系统就可以使用该方法。&
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具  上篇的预告好像是&聊天室的小细节,你都注意到了吗?&。今天也是为那篇做铺垫吧。之前的版本有好多问题,比如:当前登录用户是否合法问题,userid参数如果随便传后台没有验证。还有一个致命的问题,用户AB都在线,但是如果A没有打开B的窗口或者B没有打开A的窗口,那么发消息,对方是收不到的。因为他们没有进入到同一个组里面。本篇讲述了一些Redis的东西。由于项目本身就是为了学习和练习一些东西。所以,Redis并不是我的强项,只不过随便研究研究,具体专业的用法我也不太会。还在学习中。。。
  首先,我采用了Redis中的哈希表结构来存储用户的在线信息。如下图所示:key代表userid,value是用户的connectionid。
  是不是很简单,那么存储这些数据有什么好处呢,
  1.我们可以统计多少在线用户
  2.配合前端界面,实现某个好友是否在线
  3.判断好友是否在线在决定是否像该好友推送消息(不在线的话,直接存储离线消息就可以)
  4.解决前言中存在的问题。对于这个问题详细解释一下,比如A给B发消息,A点击打开了B的窗口,现在A已经加入到组AB中。但是B不在组AB中,所以,B收不到本组的消息。假如A打开B窗口的时候,判断一下A是否在线,如果A在线,那么将A加入到AB组中,也就是多了一步 A=》Group的操作。这样的话,就解决了AB不同组导致收不到消息的问题。详细看下图:
  我们只要在Hub代码中的建立连接,失去连接,重新连接的方法中添加对当前用户的操作逻辑就可以。
/// &summary&
/// 获取当前用户信息
/// &/summary&
private OnlineUser CurrentOnlineUser
return new OnlineUser
connectionid = CurrentConnectId,
userid = CurrentUserId
/// &summary&
/// 建立连接
/// &/summary&
/// &returns&&/returns&
public override Task OnConnected()
//将当前用户添加到redis在线用户缓存中
LayIMCache.Instance.OperateOnlineUser(CurrentOnlineUser);
return Clients.Caller.receiveMessage("连接成功");
/// &summary&
/// 失去连接
/// &/summary&
/// &param name="stopCalled"&&/param&
/// &returns&&/returns&
public override Task OnDisconnected(bool stopCalled)
//将当前用户从在线用户列表中剔除
LayIMCache.Instance.OperateOnlineUser(CurrentOnlineUser, isDelete: true);
return Clients.Caller.receiveMessage("失去连接");
/// &summary&
/// 重新连接
/// &/summary&
/// &returns&&/returns&
public override Task OnReconnected()
//将当前用户添加到redis在线用户缓存中
LayIMCache.Instance.OperateOnlineUser(CurrentOnlineUser);
return Clients.Caller.receiveMessage("重新连接");
  这里我用的.NET客户端是&StackExchange.Redis.Extensions.Core& ,他其实是在&StackExchange.Redis 的基础上有一层封装。用起来更方便一些,喜欢直接用&&StackExchange.Redis 的也没问题。
  详细代码如下:
static NewtonsoftSerializer serializer = new NewtonsoftSerializer();
StackExchangeRedisCacheClient cacheClient = new StackExchangeRedisCacheClient(serializer);
#region 在线用户处理
public void OperateOnlineUser(OnlineUser user, bool isDelete = false)
if (isDelete)
cacheClient.HashDelete(LayIMConst.LayIM_All_OnlineUsers, user.userid);
cacheClient.HashSetAsync(LayIMConst.LayIM_All_OnlineUsers, user.userid, user.connectionid);
#endregion
  当我们刷新页面的时候,会先调用 OnDisconnected 方法,在调用 OnConnected 方法。不过,HashSet方法如果是同一个key,可以覆盖其值。
  本篇就到这里了,界面上没有改动,只不过增加了一些基于redis缓存的逻辑。
  GitHub:& 喜欢的话给一个star吧,谢谢啦。
  交流群:
阅读(...) 评论()您所在的位置: &
ASP.NET在线文件管理模块的设计与开发
ASP.NET在线文件管理模块的设计与开发
idonet的博客
现代企业级开发中,在线文档管理是必不可少模块之一,本例所讲在线文档管理模块包括了文件上传到服务器上、文件浏览、重命名、移动、复制、删除、新建文件夹、压缩、解压缩、在线编辑等多种常用操作...
在线文件管理模块功能及应用:
现代企业级开发中,在线文档管理是必不可少模块之一,本例所讲在线文档管理模块包括了文件上传到服务器上、文件浏览、重命名、移动、复制、删除、新建文件夹、压缩、解压缩、在线编辑等多种常用操作,适用于无纸化办公OA、ERP、CRM、项目管理、文件管理(网盘)、主机管理等多种场合。
在线文件管理模块特点:
全静态页面、执行效率高;使用AJAX技术,用户体验好;界面美观,全新的对话框;操作简便,一个页面完成所有操作;纯DIV布局,代码简便控制,难度高;纯手工代码,功能扩展容易;抛弃传统&拖控件&做法,真正意义上的提高;项目结构简单,易于融入任何系统;
在线文件管理模块展示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/8170.jpg" border="0" longdesc="" />
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/8171.jpg" border="0" longdesc="" />
在线文件管理模块实现技能点:
自定义AJAX操作,AJAX-tree,AJAX-Dialog;DIV布局技术;HttpHandler技术;JSON技术;IO操作技术;在线文本编辑技术;在线压缩技术
在线文件管理模块具体实现过程:
搭建项目层次如图
CSS:& 存放整站样式文件
JS:存放全部JS文件
UpFiles:存放上传的文件
WebExplorer.html:& 唯一的界面
MyWebExplorer.ashx:一般处理程序,用来处理HTTP请求
DownloadFile.cs:下载文件操作类
ZipClass.cs:压缩文件操作类
fckeditor:在线文本编辑器
目录结构如下:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' alt="" src="/files/uploadimg/8172.jpg" border="0" longdesc="" />
在线文件管理-树-Ajax.js
function&getHttpRequest() &{ &httpRequest&=&new&XMLHttpRequest(); &httpRequest&=&new&ActiveXObject(&Msxml2.XMLHTTP&); &} &&function&executeHttpRequest(method,&url,&data) &{ &&&&&var&xmlHttp&=&getHttpRequest(); &&&&&xmlHttp.open(method,&url,&false); &&&&&xmlHttp.setRequestHeader(&Content-Type&,&&application/x-www-form-urlencoded&); &&&&&xmlHttp.send(data); &&&&&return&xmlHttp.responseT &}& &&function&TreeNode() &{ &&&&&var&self&=&this; &&&&&var&fileContainer&=&$(fileDivID); &&&&&&&&&&&&&&&&&&&&& &&&&&&this.childArea&=&createDiv(); &&&&&&this.childArea.style.display&=&&none&; &&&&&&this.container.appendChild(this.childArea); &&&&&}& &&this.clickNode&=&function() &&&&&{ &&&&&&&&&self.ClearCurrentStatus(); &&&&&&&&&currentNode&=& &&&&&&&&&self.SetCurrentStatus(); &&&&&&&&&self.CreateChildren(); &&&&&}&
关于在线文件管理-树-Tree.js的几点解说:
ClearCurrentStatus:清除当前节点状态
GotoParentNode:返回上级节点
SetCurrentStatus:设置当前节点状态
CreateChildren:创建子节点
Refersh:刷新
createImage:创建图片
createFileView:创建文件展现方式
clickDirectory:点击目录操作
完整代码已经提供,记得点一下推荐哦。
原文链接:
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
ASP.NET是常用的网站开发技术之一,本专题将给大家提供一些ASP.N
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
Hadoop Summit 2013 大会讲师 PPT 第二季重磅来袭!如
现在这天气到处都是高温,还是老老实实的呆在家里上网
、27日,在美国圣何塞举行的Hadoop Summit
本书是在“思想方法学”这一软件工程尚未涉足过的领域中的实习之作。作者亲历国内软件工程的英雄时代、泡沫时代,从失败中醒觉而
51CTO旗下网站要防止同一用户同时登陆,首页应该记录在线用户的信息(这里与用户名为例),然后判断正在登陆的用户里面是否已存在。在这里使用一个cache存放已经登陆的用户名,但是还有一个问题就是要知道用户是什么时候离开系统的呢?这就要定期清除cache中的内容了,也就是设置一个cache的时间。这个时间可以跟用户的session值联系起来,刚好当用户session值失效的时候该用户在cache里面的信息也会被清空.这样就达到了防止同时登陆的效果,具体代码如下,放在登陆成功的地方:&&string key = TextBox1.T //用户名文本框设为cache关键字
string uer = Convert.ToString(Cache[key]); //读取cache中用户相应的值
//判断cache中是否有用户的信息,如果没有相关的值,说明用户未登陆
if (uer == null || uer == String.Empty)
 //定义cache过期时间
 TimeSpan SessTimeout = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);
 //第一次登陆的时候插入一个用户相关的cache值,
 HttpContext.Current.Cache.Insert(key, key, null, DateTime.MaxValue, SessTimeout,&& System.Web.Caching.CacheItemPriority.NotRemovable, null);
 Session[&ADMINID&] = TextBox1.T
 Response.Redirect(&main.aspx&);
 //重复登陆
 Response.Write(&&script&alert('您的账号已经登陆!');window.location='login.aspx';&/script&&);
广告位招租...
回复:ASP.NET2.0-防止同一用户同时登陆
回复:ASP.NET2.0-防止同一用户同时登陆
不错! 学习了。谢谢楼主~
lonely_1225
回复:ASP.NET2.0-防止同一用户同时登陆
代码不错呢!
回复:ASP.NET2.0-防止同一用户同时登陆
多久检测一次呢?
这样判断用户是否离线是不是可能出现用户离线了
系统还未检测到呢?
回复:ASP.NET2.0-防止同一用户同时登陆
收下了,以备后用!
supremeholy
回复:ASP.NET2.0-防止同一用户同时登陆
可以在application中记录登陆的用户的id
回复:ASP.NET2.0-防止同一用户同时登陆
不错,学习了!!
回复:ASP.NET2.0-防止同一用户同时登陆
还是猪头好
回复:ASP.NET2.0-防止同一用户同时登陆
我们一般是在用户进首页的时候给session里扔个值,然后在别的页面里提那个值,有就是登录过,没有就是没有登录。

我要回帖

更多关于 判断qq客服离线状态 的文章

 

随机推荐