本文提供一种运用Stored Procedure验证login输入的方法,这种方法与目前大多数ASP程序的验证方法相比,执行效率高,代码简捷。在这里我运用了一个sp_login的SP来获得customerID,然后把它作为Session全程使用。看了许多商城代码,大多数使用cookie来保存,我认为不是一种好的方法。另外,运用COMMAND对象连接ADO是执行效率最高的方法,可以参考MSDN的相关文章,这是MS推荐的连接方法。在以后的文章中,我将频繁使用COMMAND对象和Stored Procedure来建立高效率,保密的商城程序。
另一个需要说明的是错误信息返回的处理方法。许多程序使用Javascript来验证,这种频繁的语言转换会降低程序的执行效率,建议大家使用服务器端的验证方法,因为我看见许多商城程序采用了Javascript。
网上流行的一些商城程序的SQL Server版本,我看了几个,发现不是真正的SQL Server版本,只是把数据库从ACCESS转换到了SQL SERVER,没有利用SQL SERVER一些优秀的性能,从而降低了执行效率。
?
Dim strUserID, strPassword
strUserID = Request.Form("txtLogonName")
strPassword = Request.Form("txtPassword")
Dim strErrMsg
strErrMsg = ""
If Trim(strUserID) = "" OR Trim(strPassword) = "" Then
?strErrMsg = strErrMsg & "UserID and Password cannot be blank
"
Else
Dim objCmd
Set objCmd = Server.CreateObject("ADODB.Command")
objCmd.ActiveConnection = strConn 'Where?
objCmd.CommandText = "sp_Login" 'What?
objCmd.CommandType = adCmdStoredProc
'Create Parameters
Dim objParam1, objParam2, objParam3
Set objParam1 = objCmd.CreateParameter("@CUS_logonName", adVarChar, adParamInput, 50, strUserID)
Set objParam2 = objCmd.CreateParameter("@CUS_password", adVarChar, adParamInput, 50, strPassword)
Set objParam3 = objCmd.CreateParameter("@CUS_customerID", adInteger, adParamOutput)
'Specify which order they should be in
objCmd.Parameters.Append objParam1
objCmd.Parameters.Append objParam2
objCmd.Parameters.Append objParam3
objCmd.Execute
'Test3: Is userid and password valid in DB
if ISNULL(objParam3.Value) Then
?'Invalid credentials
?strErrMsg = strErrMsg & "Invalid username and password
"?
end if
end if
If strErrMsg = "" Then
?'No problems
?Session.Contents("CustomerID") = objParam3.Value
?Response.Redirect "serach.asp"
Else
?Dim strURL
?strURL = "index.asp?errMsg=" & strErrMsg
?strURL = strURL & "&UserID=" & strUserID
?strURL = strURL & "&Password=" & strPassword
?Response.Redirect strURL
End If
%
?