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

eastliangliang 2001-07-20 04:00:44
小弟需要在用户登录是记录下登录时间和IP,在注销时记录注销时间。
可是又怕用户不注销,直接关浏览器。在Session_OnEnd里又无法进行数据库操作。
用户登录时我不允许重复登录,我是判断注销时间为在线。万一用户不注销,下次他就进不来了,我该怎么办,给点建议,先给20分,不够再加。
...全文
261 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
eastliangliang 2001-07-26
  • 打赏
  • 举报
回复
问题解决,感谢大家参与,结帐!
eastliangliang 2001-07-22
  • 打赏
  • 举报
回复
用了,现在的问题是:我不允许用户同时登录两次以上,所以在后台数据库里判断用户是否在线。
用户非法退出,注销时间仍为在线,所以下次他进不来了。有更好的方法判断吗?
geyunpeng 2001-07-22
  • 打赏
  • 举报
回复
无论怎么样
Session.OnEnd总是会执行的
它是运行在服务器上的呀!!!
和你浏览器怎么关的没有关系
如果你正确注销的,则通过Session.Abandon触发Session.OnEnd事件
如果你是关浏览器、甚至是关电源,等到timeout时也会触发Session.OnEnd事件
eastliangliang 2001-07-22
  • 打赏
  • 举报
回复
坏了,Sub Application_OnStart里有注释,不过我去了注释也不对,我都调试晕了。
eastliangliang 2001-07-22
  • 打赏
  • 举报
回复
大家过来看一下:
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

eastliangliang 2001-07-21
  • 打赏
  • 举报
回复
neweb(永不言败):
我的时间挺紧的,我对ASP不是很熟,麻烦写个大概程序,解决问题后,我会加分的。
stanely 2001-07-21
  • 打赏
  • 举报
回复
不能再次登陆?为什么不用session.timeout?
我觉得是你的设计初衷有问题。条条大道通Roma呀!
eastliangliang 2001-07-21
  • 打赏
  • 举报
回复
我的程序又出了问题。
global.asa中,Session_OnStart可用,Session_OnEnd死活不执行,什么问题?
Session确实已经过期了。
neweb 2001-07-20
  • 打赏
  • 举报
回复
eastliangliang(青苹果) :

你的代码有问题,这句:yonghuming=session("user"),
当用户停电20分钟后将执行到,而这时 session("user") 已经读不到值了,

我建议:用户登录时,把所有 yonghuming 放入 application 中,Session_OnEnd时检查每个用户的在线状态,如果不在线则注销,可参考聊天室中聊神掉线时的做法,我就不帮你找代码了,呵呵.



eastliangliang 2001-07-20
  • 打赏
  • 举报
回复
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>
不过感觉总执行不到。
andyrew 2001-07-20
  • 打赏
  • 举报
回复
可以的,在session_onend里,update数据库,修改时间。
eastliangliang 2001-07-20
  • 打赏
  • 举报
回复
问题是在Session_OnEnd里无法修改注销时间。
怕用户不注销,或是突然停电。下次用户就进不来了。
uhoo 2001-07-20
  • 打赏
  • 举报
回复
那他首先就是不法分子
andyrew 2001-07-20
  • 打赏
  • 举报
回复
这样不行吧,如果一个session同时打开两个窗口,当关闭其中一个时,另一个不也就完完了。
uhoo 2001-07-20
  • 打赏
  • 举报
回复
加上一个函数
<script language="javascript">
function leave()
{
window.location("注销文件");
}

</script>
<body Onunload="leave()">
andyrew 2001-07-20
  • 打赏
  • 举报
回复
可以把session.time设得短一些,要Session_Onend中删除用户

28,408

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧