本文提供一种运用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一些优秀的性能,从而降低了执行效率。
<% Option EXPLICIT %> ? <% 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
%>
? 
|