CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

关于用户登录和注销的问题。

楼主eastliangliang(青苹果:拒绝羊皮的狼)2001-07-20 16:00:44 在 Web 开发 / ASP 提问

小弟需要在用户登录是记录下登录时间和IP,在注销时记录注销时间。  
  可是又怕用户不注销,直接关浏览器。在Session_OnEnd里又无法进行数据库操作。  
  用户登录时我不允许重复登录,我是判断注销时间为在线。万一用户不注销,下次他就进不来了,我该怎么办,给点建议,先给20分,不够再加。 问题点数:20、回复次数:16Top

1 楼andyrew(长江后浪)回复于 2001-07-20 16:03:34 得分 5

可以把session.time设得短一些,要Session_Onend中删除用户Top

2 楼uhoo(幽狐)回复于 2001-07-20 16:05:57 得分 5

加上一个函数  
  <script   language="javascript">  
  function   leave()  
  {  
  window.location("注销文件");  
  }  
   
  </script>  
  <body   Onunload="leave()">Top

3 楼andyrew(长江后浪)回复于 2001-07-20 16:10:08 得分 0

这样不行吧,如果一个session同时打开两个窗口,当关闭其中一个时,另一个不也就完完了。Top

4 楼uhoo(幽狐)回复于 2001-07-20 16:11:56 得分 0

那他首先就是不法分子Top

5 楼eastliangliang(青苹果:拒绝羊皮的狼)回复于 2001-07-20 16:43:04 得分 0

问题是在Session_OnEnd里无法修改注销时间。  
  怕用户不注销,或是突然停电。下次用户就进不来了。Top

6 楼andyrew(长江后浪)回复于 2001-07-20 16:53:45 得分 0

可以的,在session_onend里,update数据库,修改时间。Top

7 楼eastliangliang(青苹果:拒绝羊皮的狼)回复于 2001-07-20 17:12:18 得分 0

andyrew(java):帮我看看代码吧。  
   
  <script   language="vbscript"   runat="server">  
  Sub   Application_OnStart  
   
  End   Sub  
   
  Sub   Application_OnEnd  
   
  End   Sub  
   
  Sub   Session_OnStart  
   
  End   Sub  
   
  Sub   Session_OnEnd  
  Application.lock  
  dim   conn        
          dim   connstr  
           
                on   error   resume   next  
                connstr="DSN=aaa;uid=gwpickup;pwd=gwpickup"            
               
                set   conn=server.createobject("ADODB.CONNECTION")  
                conn.open   connstr  
                if   err.number<>0   then    
                        err.clear  
                        set   conn=nothing  
    response.write   "数据库连接出错!"  
    Response.End  
               
                end   if        
           
  yonghuming=session("user")  
  zhuxiaoshijian=cstr(now())  
  sql="update   login   set   注销时间='"+zhuxiaoshijian+"'where   用户登录名='"+yonghuming+"'and   注销时间='在线'"  
  '   response.write   sql  
          conn.execute   sql  
   
  if   err.number   <>   0   then  
  response.redirect   "error.asp?errmsg=cstr(err.description)"  
  'else  
  ' response.redirect   "login/logoutok.asp"  
  ' response.end  
  end   if  
    conn.close  
              set   conn=nothing  
     
  Application.unlock  
  End   Sub  
  </script>  
  不过感觉总执行不到。Top

8 楼neweb(永不言败)回复于 2001-07-20 22:44:42 得分 5

eastliangliang(青苹果) :  
   
  你的代码有问题,这句:yonghuming=session("user"),  
  当用户停电20分钟后将执行到,而这时   session("user")   已经读不到值了,  
   
  我建议:用户登录时,把所有   yonghuming   放入   application   中,Session_OnEnd时检查每个用户的在线状态,如果不在线则注销,可参考聊天室中聊神掉线时的做法,我就不帮你找代码了,呵呵.  
   
   
   
  Top

9 楼eastliangliang(青苹果:拒绝羊皮的狼)回复于 2001-07-21 10:43:08 得分 0

neweb(永不言败):  
  我的时间挺紧的,我对ASP不是很熟,麻烦写个大概程序,解决问题后,我会加分的。Top

10 楼eastliangliang(青苹果:拒绝羊皮的狼)回复于 2001-07-21 17:30:30 得分 0

我的程序又出了问题。  
  global.asa中,Session_OnStart可用,Session_OnEnd死活不执行,什么问题?  
  Session确实已经过期了。  
  Top

11 楼stanely(俺是邢她汉子)回复于 2001-07-21 20:49:27 得分 0

不能再次登陆?为什么不用session.timeout?  
  我觉得是你的设计初衷有问题。条条大道通Roma呀!  
  Top

12 楼eastliangliang(青苹果:拒绝羊皮的狼)回复于 2001-07-22 08:47:34 得分 0

用了,现在的问题是:我不允许用户同时登录两次以上,所以在后台数据库里判断用户是否在线。  
  用户非法退出,注销时间仍为在线,所以下次他进不来了。有更好的方法判断吗?Top

13 楼eastliangliang(青苹果:拒绝羊皮的狼)回复于 2001-07-22 16:20:01 得分 0

大家过来看一下:  
  global.asa:  
  <script   language="vbscript"   runat="server">  
  Sub   Application_OnStart  
  dim   nowuser()  
  Application("visitor")=1  
  'Application("nowuser")="a"  
  End   Sub  
   
  Sub   Application_OnEnd  
  Application("visitor")=1  
  'Application("nowuser")="a"  
  End   Sub  
   
  Sub   Session_OnStart  
  session.timeout=1  
  Application("visitor")=Application("visitor")+1  
  End   Sub  
   
  Sub   Session_OnEnd  
  redim   nowuser(Application("visitor"))  
  Application("visitor")=Application("visitor")-1  
  nowuser=Application("nowuser")  
  for   each   item   in   nowuser  
  if   item=session("user")   then  
  item=""  
  end   if  
  next  
  Application.lock  
  Application("nowuser")=nowuser  
  Application.unlock  
  End   Sub  
   
  </script>  
  login.asp:  
  <%user=request.form("user")  
  pwd=request.form("pwd")  
  if   user=""   then  
  response.redirect   "login.htm"  
  end   if  
  set   rs=server.createobject("adodb.recordset")  
  sql="select   *   from   yonghu   where   用户名='"&user&"'   and   密码='"&pwd&"'"&"and   是否可用=1"  
  rs.open   sql,conn,3,2  
  if   not   rs.eof   then  
  used=0  
  num=Application("visitor")  
  redim   nowuser(num)  
  nowuser=Application("nowuser")//此为15行  
   
  Microsoft   VBScript   运行时错误   错误   '800a000d'    
   
  类型不匹配    
   
  /guanli/login/login.asp,   行15    
   
  Top

14 楼eastliangliang(青苹果:拒绝羊皮的狼)回复于 2001-07-22 16:23:26 得分 0

坏了,Sub   Application_OnStart里有注释,不过我去了注释也不对,我都调试晕了。Top

15 楼geyunpeng(Penny)回复于 2001-07-22 16:30:48 得分 5

无论怎么样  
  Session.OnEnd总是会执行的  
  它是运行在服务器上的呀!!!  
  和你浏览器怎么关的没有关系  
  如果你正确注销的,则通过Session.Abandon触发Session.OnEnd事件  
  如果你是关浏览器、甚至是关电源,等到timeout时也会触发Session.OnEnd事件  
  Top

16 楼eastliangliang(青苹果:拒绝羊皮的狼)回复于 2001-07-26 10:59:34 得分 0

问题解决,感谢大家参与,结帐!Top

相关问题

  • 请问高人,win2000Pro如何记录用户登录和注销的时间
  • 急求"用户登录后长时间无操作,自动注销"的实现方法和代码
  • Windows服务程序记录用户登录/注销的操作
  • 关于一个用户登录后注销的问题!!!急!!!!!!!!!!!!!
  • 注销登录的问题?
  • 怎样注销登录?
  • 注销当前用户,用另一用户名登录windows,这程序怎么编?
  • 用户登录?
  • 使用Forms验证,如何知道一个同名的用户已经登录并且注销它,谢谢
  • 登录和用户有何区别?

关键词

  • 注销
  • 用户
  • 代码
  • 数据库
  • 执行
  • onend
  • 登录
  • 问题
  • 线
  • 判断

得分解答快速导航

  • 帖主:eastliangliang
  • andyrew
  • uhoo
  • neweb
  • geyunpeng

相关链接

  • Web开发类图书

广告也精彩

反馈

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