[返回]
计算机世界2001年第18期验证注册用户的方法
逸杰软件 居 峰
对于大多数网站,有许多服务是仅提供给注册用户的。如果网站要求浏览者先注册后进入,那么在用户提交了所注册的用户名和密码以后,网站的后台就需要有一个用户名和密码的验证处理过程来处理用户的登录信息。本文介绍实现这一验证过程的三种方法。
利用SQL查询命令
1.在Web服务器端建立ODBC数据源,设置如下:
系统DSN:SampleODBC;
服务器名:MyServer;
数据库名:Sales;
数据库用户名:sa;
数据库密码:password。
2.在Web服务器端建立用户登录页面Login.htm。
3.在Web服务器端建立用户验证文件Verify.asp。
<% ’通过ODBC连接数据库
Set Cn = Server.CreateObject(“ADODB.Connection”)
Cn.Open “SampleODBC”,“sa”,“password”
Set Rs= Server.CreateObject(“ADODB.Recordset”)
User = Request.Form(“user”)
Pwd = Request.Form(“pwd”)
Sql=“select ul_id,ul_pwd from user_login where ul_id=‘“& User &”’ and ul_pwd=‘“& Pwd &”’”
’用户验证
Set rs = Cn.Execute(Sql)
If Not Rs.EOF Then
’对查询结果进行再次验证,防止SQL字符串生成时出现安全漏洞
If Rs(“ul_id”)=User and Rs(“ul_pwd”)=Pwd Then
’通过验证
Rs.Close
Cn.Close
’转向验证通过后的页面
Response.Redirect “NextPage.htm”
Else
’没有通过验证
Rs.Close
Cn.Close
’返回登录页面
Response.Redirect “Login.asp”
End If
Else
’没有通过验证
Rs.Close
Cn.Close
’返回登录页面
Response.Redirect “ Login.asp”
End If %>
利用存储过程
1.在Web服务器端建立用户登录页面Login.htm。
2.在SQL数据库服务器端建立进行用户验证的存储过程VerifyP:
CREATE PROCEDURE VerifyP
@user varchar(8),
@pwd varchar(8)
AS
declare @temp1 varchar(8),@temp2 varchar(8)
select @temp1 = ul_id,@temp2=ul_pwd
from user_login
WHERE ul_id = @user and ul_pwd = @pwd
if @temp1=@user and @temp2=@pwd
/*通过验证*/
select 1
else
/*没有通过验证*/
select 0
3.在Web服务器端建立用户验证文件Verify.asp。
<%
’通过非DSN方式连接数据库,无须建立ODBC数据源
Set Cn = Server.CreateObject(“ADODB.Connection”)
Cn.Open“Driver={SQLServer};Server=MyServer;UID=sa;PWD=password;Database=sales”
Set Rs= Server.CreateObject(“ADODB.Recordset”)
User = Request.Form(“user”)
Pwd = Request.Form(“pwd”)
ExecStr=“exec VerifyP‘“& User &”’,‘“& Pwd &”’”
’用户验证,执行存储过程
Rs = Cn.Execute(ExecStr)
If Rs(0)=1 Then
’通过验证
Rs.Close
Cn.Close
’转向验证通过后的页面
Response.Redirect “NextPage.htm”
Else
’没有通过验证
Rs.Close
Cn.Close
’返回登录页面
Response.Redirect “Login.asp”
End If %>
自己开发服务器端组件
利用适当的编程工具可以开发出类似于ASP中ActiveX Server组件的自主组件,开发者可以将连接数据库和验证过程一起封装到组件对象中。使用VB 6.0能够很方便地完成组件开发工作。
1.打开VB 6.0,新建工程Checkout,类名为Verify。 2.输入程序代码:
Function Check(ByVal User As String, ByVal Pwd As String) As Boolean
Dim CN As New ADODB.Connection
Dim Rs As New ADODB.Recordset
On Error GoTo Err
CN.ConnectionString= “Data Source=sampleodbc;User ID=sa;Password=password”
CN.Open
If CN.State <> adStateOpen Then
’数据库连接失败
Login = False
Else
’假定注册用户名和密码在表tbl_user中
Set Rs = CN.Execute(“select ul_id,ul_pwd from tbl_user where ul_id=‘“ & User & ”’ and ul_pwd=‘“& Pwd & ”’”)
If Rs.EOF Then
’找不到用户名和密码
Login = False
Else
’找到用户名和密码
If Rs(0).Value = User And Rs(1).Value = Pwd Then
’通过验证
Login = True
Else
’没有通过验证
Login = False
End If
End If
Rs.Close
Set Rs = Nothing
End If
CN.Close
Set CN = Nothing
Exit Function
Err: Login = False
End Function
如果要增强Checkout.dll的功能,可以在类中添加更多的过程或函数。
3.生成Checkout.dll,并进行注册 (如果是直接在Web服务器上生成Checkout.dll,可以省略此注册过程),将Checkout.dll拷贝到Web服务器的C:\WinNT\System32目录下,运行regsvr32 C:\WinNT\System32\Checkout.dll。
4.在Web服务器端建立用户登录页面Login.htm。
5.在Web服务器端建立用户验证文件Verify.asp。
<%
User=(Request.Form(“user”)
Pwd=(Request.Form(“pwd”)
Set checker =CreateObject(“Checkout.Verify”)
’用户验证
Result= checker.Check(User,Pwd)
If Result=true Then
’通过验证
set checker=nothing
’转向验证通过后的页面
Response.Redirect “NextPage.htm”
else
’没有通过验证
set checker=nothing
’返回登录页面
Response.Redirect “Login.asp”
end if %>
随着ASP脚本的增多,ASP文件会变得越来越大。由于ASP脚本是解释执行的,所以我们可以将许多重复使用的功能编写成动态连接库DLL,然后再用ASP脚本来调用。这样,不但减少了ASP脚本的数量,提高了服务器的运行效率,而且还保护了开发者的源代码的安全。