CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

用户关闭浏览器怎么办?

楼主benniao2(笨鸟)2004-12-04 01:27:38 在 .NET技术 / ASP.NET 提问

我在数据库中的用户表中创建了一个字段以表示用户的在线状态,在用户登陆的时候,将状态置为在线,当用户点击退出按钮时,改写该状态。但是这样一来,一旦用户关闭浏览器,这时无法改写状态字,这样用户就再也不能登陆了。这个问题怎么解决呢?(用户要求一定要在数据库中存储用户的在线状态)谢谢各位高手! 问题点数:0、回复次数:16Top

1 楼qixiao(七小)(Gadgets中文网http://www.gadgets.net.cn)回复于 2004-12-04 02:44:10 得分 0

用Session岂不是更好?Top

2 楼Miracle(新一代的开山怪)回复于 2004-12-04 04:34:29 得分 0

使用Session来进行操作,在Session_End事件中将用户标识清除。Top

3 楼lhx1977(清水无鱼)回复于 2004-12-04 08:10:02 得分 0

是不是可以写一个窗体关闭事件啊。  
  Top

4 楼jonescheng(小块头无大智慧)回复于 2004-12-04 08:35:26 得分 0

请参考  
  http://dev.csdn.net/develop/article/35/35248.shtmTop

5 楼Study_Now( ? )回复于 2004-12-04 08:52:26 得分 0

关注~Top

6 楼forideal(我心飞翔)回复于 2004-12-04 08:53:07 得分 0

/*  
          本文属作者原创,请尊重作者劳动成功,转载和使用注明出处  
          作者:子扬  
          联系方式:QQ:21112856  
          网站:www.25bz.com  
          MSN:   zjgzkq(at)hotmail(dot)com  
  */  
   
  一、原理  
  在.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();  
  }  
  Top

7 楼zhy0101(莠)回复于 2004-12-04 09:49:45 得分 0

关掉浏览器是无法得知的,只能用时间判断Top

8 楼warren1999(warren1999)回复于 2004-12-04 16:41:13 得分 0

在配置文件会话结束事件里写代码Top

9 楼kentpower(至尊宝玉)回复于 2004-12-05 19:17:53 得分 0

我的决解方案是在要被关闭的页面加一段代码(用java,页面unload事件!),代码的内容就是弹出一个新页面,在执行一面代码完成用户退出的有关操作!Top

10 楼listhome(不想睡)(专回百分贴)回复于 2004-12-05 19:25:49 得分 0

我做了一个控件,可以在窗体关闭时产生服务端事件!Top

11 楼flcandclf(怪手大分)回复于 2004-12-05 21:29:53 得分 0

在global.asax里写  
  protected   void   Session_End(Object   sender,   EventArgs   e)  
  {  
  string   sqlA,sqlB,sqlC;  
  sqlA="delete   系统设置   where   about='计数器'";  
  sqlB="insert   into   系统设置(about,content)   values('计数器','"+Application["visitedcount"]+"')";  
  sqlC="update   登陆日志   set   是否在线=0   where   ryid="+Convert.ToInt32(Session["ryid"]);  
   
  adohelper   myado=new   adohelper();  
  try  
  {  
  myado.ExecuteUpdate(sqlA);  
  myado.ExecuteUpdate(sqlB);  
  myado.ExecuteUpdate(sqlC);  
  }  
  catch  
  {  
  }  
  finally  
  {  
  Application.Lock();  
  Application["online"]=(int)Application["online"]-1;  
  Application.UnLock();  
  }  
  }  
  Top

12 楼benniao2(笨鸟)回复于 2004-12-05 23:59:33 得分 0

我怎样在global.asax取到一个Session值?Top

13 楼huleeyar(虚拟过客)回复于 2004-12-06 00:13:35 得分 0

第一无法得知  
  第二每个页面都加检查用户函数,如果用户访问更新用户在线时间  
  第三设置超时时间(建议放在web.config)中,超过时间用户不访问视作离线Top

14 楼Fortune2k1(Forune2k1)回复于 2004-12-09 14:10:36 得分 0

在页面的onbeforeUnload事件里写动作:  
  onbeforeunload="document.form1.action='yourPage?exec=unload';document.form1.submit();"  
  这样在页面被关闭时,会有一次回传服务器的动作。  
  Top

15 楼misng(沦落人)回复于 2004-12-09 17:01:08 得分 0

我有一方案:建一表,一字段.值为0表示不在线:  
  web主页面打开是定时更新这一字段为3;如每2分钟;如点击写的关闭按钮事件则直接将字段更新为0  
  在服务器端,写一win窗本程序,每2分钟将这字段值>0的减1,当关闭6分钟后就减为0即不在线.  
  这样在登陆是检查字段值就可,如>0表示在线或未正常退出.则等6分钟后可以重新进入系统.  
   
  Top

16 楼athossmth(athos)回复于 2004-12-10 11:23:22 得分 0

fortune2k1的是对的。  
   
  Top

相关问题

  • 怎样判断用户关闭了浏览器?
  • 怎样判断一个用户已经关闭了浏览器?!
  • 怎样判断用户关闭了浏览器?
  • 如何防止用户单击关闭按钮关闭浏览器?
  • 通过jsp或servlet如何记录用户关闭浏览器时的时间
  • 如何在关闭浏览器后立即结束用户的Session?
  • 怎样在用户关闭浏览器之前,提示“是否关闭”,如果选择了“否”还能够保持这个浏览器窗口?
  • 请问到手,我的email用户名和密码被浏览器纪录下来,怎么办?
  • 关于关闭浏览器!!!!!!!!!!!
  • 关于关闭浏览器!!!!!!!!

关键词

  • .net
  • 字段
  • 用户
  • 数据库
  • 页面
  • uson
  • 访问
  • sqlb
  • sqla
  • myado

得分解答快速导航

  • 帖主:benniao2

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo