地球倾斜角度:ASP中的SESSION问题. 如果好用,再加分!

来源:百度文库 编辑:神马品牌网 时间:2024/04/28 14:41:22
加我QQ. 68852454

本人急.

问题非常古怪。是这样的。

我在Global.asa中设置了Session.TimeOut = 30(Session_OnStart)

读取这个属性的时候也显示的30

If Session("IsLogin") = "" Then
Response.Write("您未登陆或者超时")
Response.End()
End If

不知道为什么,如果一会不动的话,就提示“您未登陆或者超时”。
<!--#include file="Conn.asp"-->
<!--#include file="../Inc/Md5.asp"-->
<%
Session.TimeOut=120
Dim Ay_AdminName,Ay_AdminPwd,Ay_CheckCode,Rs,Sql
Ay_CheckCode = Request.Form("CheckCode")
If Ay_CheckCode <> Trim(Session("GetCode")) Then
Response.Write("<script language='JavaScript'>alert('附加码错误!请重新输入!');history.go(-1);</script>")
Response.End()
End If
Ay_AdminName = Request.Form("UserName")
Ay_AdminPwd = Request.Form("password")
Set Rs = Server.CreateObject("Adodb.RecordSet")
SQL = "SELECT Admin_Name,Admin_Pwd,Admin_LoginNumber FROM TBL_ADMIN WHERE Admin_Name = '" & Ay_AdminName & "'"
Rs.Open SQL,Conn,1,3
If Not Rs.Eof Then
If Rs("Admin_Pwd") = Md5(Ay_AdminPwd) Then
Session("IsLogin") = "Yes"
Session("AdminName") = Ay_AdminName
Rs("Admin_LoginNumber") = Rs("Admin_LoginNumber") + 1
Rs.Update()
SQL = "INSERT INTO tbl_AdminLoginLog(Login_Name,Login_IP) VALUES('" & Ay_AdminName &"','" & Request.ServerVariables("REMOTE_ADDR") & "'

一般来讲,先判断验证码----用户名及密码是否为空---验证用户名和密码与数据库数据对比---然后

Set Rs=Conn.Execute("Select id,Name,Pass From [user] where [Name]='"&NameGet&"' and [Pass]='"&PassGet&"'")
If Not(Rs.Bof And Rs.Eof) Then '若找到数据则运行下面
Session.Timeout=30 'SEESION有效时间为30分钟
'将用户资料记录到各自的Session变量中
Session("ID")=Cstr(Rs("id"))
Session("Name")=Rs("Name")
Session("Pass")=Rs("Pass")
Else
Rs.Close
Set Rs=Nothing
Response.Write"<script language='javascript'>alert('您输入的用户名或者密码错误!');history.back();</script>"
Response.End
End If
Rs.Close
Set Rs=Nothing

不需要将Session("IsLogin") = "Yes"

===============================================
你的程序逻辑蛮混乱的
Session.TimeOut=120 因该在验证码和用户名及密码都通过后再设置,而不是一开始就设置
另外
If Rs("Admin_Pwd") = Md5(Ay_AdminPwd) Then
这个根本没必要,看下我贴出的程序源码,可以直接在SELECT中判断
还有
Session("IsLogin") = "Yes"就是相当与一个钥匙,但这把钥匙没任何锯齿,这种判断登陆一点都不安全.要是在虚拟主机上的话很简单就会被SEESION欺骗过去而得到后台权限
再有
Rs("Admin_LoginNumber") = Rs("Admin_LoginNumber") + 1
后台登陆还要记录次数?拿积分吗?
最后
Session.TimeOut=120
你可以先自己调试一下,比如Session.TimeOut=1
然后看下1分钟后SEESION是否会被清空,要是设置了120分钟,但实际没有到达的话那就可能是IIS中的设置了时间强制清空,一般默认情况是以页面中的Session.TimeOut来确定清空时间的,否则就是当页面关闭后会自动清空SEESION
要是你用的是IE的话那也有可能是你开了多个IE窗口,而你关闭其中一个后那么其它IE窗口的SEESION就失效了
建议使用多窗口浏览器,如MAXTHON

有发现这种问题.在部份系统会这样.有时候又正常.建议还是改用COOKIES吧.不容易出错,当然安全性会降低一些.但是,同时又减少了服务器的开销.自己看看吧.

期待高手出现..

服务器开销我不怕。

不知道为什么,我传另一套在网上下载的程序。

就没有问题。

我的判断方式跟他的一样。

期待高手!!

1.你在程序里设置的这个时间不起作用,要看在IIS里的设置,默认是20分钟

2.如果用IIS6,可能是应用程序池回收的时间太短了,一回收资源,你的SESSION变量就没了.
http://art.todo.net.cn/HTML/article/1705.html

可以到这里找找有关文章:http://art.todo.net.cn

<!--#include file="Conn.asp"-->
<!--#include file="../Inc/Md5.asp"-->
<%
Session.TimeOut=120
Dim Ay_AdminName,Ay_AdminPwd,Ay_CheckCode,Rs,Sql
Ay_CheckCode = Request.Form("CheckCode")
If Ay_CheckCode <> Trim(Session("GetCode")) Then
Response.Write("<script language='JavaScript'>alert('附加码错误!请重新输入!');history.go(-1);</script>")
Response.End()
End If
Ay_AdminName = Request.Form("UserName")
Ay_AdminPwd = Request.Form("password")
Set Rs = Server.CreateObject("Adodb.RecordSet")
SQL = "SELECT Admin_Name,Admin_Pwd,Admin_LoginNumber FROM TBL_ADMIN WHERE Admin_Name = '" & Ay_AdminName & "'"
Rs.Open SQL,Conn,1,3
If Not Rs.Eof Then
If Rs("Admin_Pwd") = Md5(Ay_AdminPwd) Then
Session("IsLogin") = "Yes"
Session("AdminName") = Ay_AdminName
Rs("Admin_LoginNumber") = Rs("Admin_LoginNumber") + 1
Rs.Update()
SQL = "INSERT INTO tbl_AdminLoginLog(Login_Name,Login_IP) VALUES('" & Ay_AdminName &"','" & Request.ServerVariables("REMOTE_ADDR") & "')"
Conn.Execute(SQL)
Response.Redirect("Admin_Index.Asp")
Else
Response.Write("<script language='JavaScript'>alert('密码错误!');history.go(-1);</script>")
End If
Else
Response.Write("<script language='JavaScript'>alert('用户不存在!');history.go(-1);</script>")
End If
Rs.Close()
Set Rs = Nothing
CloseConn()
%>

判断登陆的时候是这样写的。
然后我再建一个Check.Asp

<%
If Session("IsLogin") = "" Then
Response.Write("<script langiage='JavaScript'>alert('您没有登陆或连接超时,请重新登陆!');top.location.href='Admin_Login.Asp';</script>")
End If
%>

然后我些建一个ASP文件.Check.Asp

<%
If Session("IsLogin") = "" Then
Response.Write("<script langiage='JavaScript'>alert('您没有登陆或连接超时,请重新登陆!');top.location.href='Admin_Login.Asp';</script>")
End If
%>

左边导航,右边显示。也就是说用的FRAME!

每个页面都Include这个文件!

过了一会就显示超时。

同意楼上的seesion.timeout=1这个测试方法