标题:用global.asa不能操作数据库,用session?
只看楼主
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
得分:0 
以下是引用迷失星际在2004-11-22 16:07:49的发言:

我写了以下代码测试

if not response.isclientconnected then conn.execute("update [user] set logouttime=#"&now&"# where username='"&session("username")&"'") end if

但并没有取得预期效果,而且not response.IsClientConnected的时候,session是不是也失效了? IsClientConnected 多久检查一次用户是否在线?

IsClientConnected不是这样用的呀

IsClientConnected 是用于执行一个长时间的操作前或是一个多重循环中检测用户是否已经关闭浏览器或者已经离线,用于节省服务器资源。

比如用户访问ShowRecord.asp ,ShowRecord.asp是一个让用户读取大量数据的程序 现在用户请求ShowRecord.asp

ShowRecord.asp 中可能是这样写的

.....

For i = 0 to RecordCount '要读取很多数据 if response.isclientconnected then '用户在线 ........执行读取操作(这个时间可能比较长) else '用户已经离线或关闭浏览器 response.end end if Next

.....

[此贴子已经被作者于2004-11-23 13:25:00编辑过]


天津网站建设 http://www./
2004-11-23 13:22
迷失星际
Rank: 1
等 级:新手上路
帖 子:358
专家分:0
注 册:2004-7-9
得分:0 

那就是说IsClientConnected不行了?

那要在用户关闭浏览器时,写入数据库用户离线时间该怎么做?


2004-11-23 13:48
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
得分:0 
在Global.asa 中编写 Session_OnEnd 事件

天津网站建设 http://www./
2004-11-23 14:06
迷失星际
Rank: 1
等 级:新手上路
帖 子:358
专家分:0
注 册:2004-7-9
得分:0 

那不就是我开始问的问题么?残念~~~

我本来就是想到用session_onEnd在global.asa

以下是我在global.asa中写的代码:

<script language="vbscript" runat="server"> sub session_onEnd set conn = server.CreateObject("adodb.connection") conn.connectionstring="provider=microsoft.jet.oledb.4.0;data source="&server.MapPath("db.mdb") conn.open conn.execute("update [user] set logouttime=#"&now&"# where username='"&session.contents("user")&"'") conn.close set conn = nothing end sub </script>

但是不行,所以我才来这里问来了,因为我想既然session都失效了,session("user")也应该失效了,怎么还好在数据库中查找username=session("user")的字段呢?

session.contents("user")是我刚刚在网上查到说在global.asa里不能用session变量,所以要用session对象的集合来调用变量,第一次用,不知道用错没有,反正还是没有效果

既然grief你说可以用session_OnEnd那你还是教教我们怎么用啊

[此贴子已经被作者于2004-11-23 16:35:31编辑过]


2004-11-23 16:27
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
得分:0 

要想记录用户离线时间没有什么特别好的方法,我提供一个方案给你:

1。建立一个Application级的二维数组ArrayName (n,1) ,其中ArrayName(n,0)保存用户名,ArrayName(n,1)保存用户最后活动时间。

2。在用户登录的时候将用户的用户名和登录时间加入ArrayName数组。

3。用户每浏览一个网页的时候都更新它的用户在ArrayName数组中的时间。

4。在Sesstion_OnEnd 或任何显示在线用户列表的地方检测所有ArrayName数组中的用户访问时间,若最后访问时间距现在时间大于Session超时时间则认为用户离线,并将其从ArrayName数组中删除。

[此贴子已经被作者于2004-11-23 20:34:29编辑过]


天津网站建设 http://www./
2004-11-23 18:12
regedit
Rank: 5Rank: 5
等 级:贵宾
威 望:19
帖 子:950
专家分:0
注 册:2004-6-8
得分:0 
这样子会不会很消耗系统资源啊?

最新作品:百货品牌商品资讯第一门户([url]http://www./[/url]),欢迎交流
2004-11-24 09:30
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
得分:0 

我没有什么更好的办法了,这个方法对于在线人数少的站点还行。要是人多了。。。呵呵。

楼上有什么好方法吗?


天津网站建设 http://www./
2004-11-24 10:07
qoker
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2004-11-24
得分:0 

顶了!!!!!

我也很想知道啊

在一篇文章上看到了下面的话:

{在本例中数据库里有个online字段是用来记录用户的在线状态,用户登录的时候,在login.asp里将online设为1,但用户离线时并没有将online设为0,要完善它,就要修改一下Session_OnEnd事件,在该事件里将online设为0。   ===global.asa===   <script LANGUAGE="VBScript" RUNAT="Server">   Sub Application_OnStart    application("online")=0    set application("conn")=Server.CreateObject("ADODB.Connection")    application("db")=Server.MapPath("\bbs.mdb") "此处最好使用绝对路径\bbs.mdb,下文有详细介绍   End Sub   sub Application_OnEnd    set application("conn")=nothing   End Sub    Sub Session_OnStart   End Sub   Sub Session_OnEnd    if session.contents("pass") then "判断是否为登录用户的Session_OnEnd      application("con").open ="driver={Microsoft Access Driver (*.mdb)};dbq="&application("db")       application.lock       application("online")=application("online")-1       application("con").Execute ("update friends set online=0 where id="&session.contents("id"))       application.unlock       application("con").close    end if   End Sub   </script> }

他说在session_onend方法里不能用Server对象,一开始我以为好了,

但是最后还是不能用啊......

还希望各位指教!!!!

2004-11-24 21:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-8069-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050059 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved