|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP脚本是采用明文(plaintext)方式来编写的。会见|把持 利用Session变量的成绩
固然Session变量是复杂易用的,并且比其他办法要平安,但仍是有一些成绩。起首,只要会见者的扫瞄器撑持cookie时,Session变量才干一般事情。只管如今年夜多半扫瞄器都撑持cookie,可是记着会见者能够回绝利用它(这依附于扫瞄器的平安设置)。
其次,出格在IIS4中,当扫瞄器哀求多个页面时,Session变量大概被中途丧失。一般,遵守上面三个复杂准绳能够将这个毛病削减到最小:
○只利用一个global.asa文件,安排在站点的根目次下。附带多个global.asa的嵌套使用程序,大概招致session变量利用越界。
○确认IUSE帐号大概它所属的组对global.asa文件最少有读的权限,而且IIS具有Anonymous会见权限。
○要确认在一切页面中你都利用一样的字符巨细写格局。Netscape(和其他扫瞄器)关于/ThisFolder/ThisFile.asp和/thisfolder/thisfile.asp这两个链接是看成在两个分歧目次下的两个分歧文件对待的。以是当从页面中取回一个cookie时,大概会由于巨细写成绩产生毛病。
在数据库中保留登录信息
假如必要跟踪大批会见者的信息,仅仅利用include文件的体例就会变得很难办理。这时候,我们可使用数据库。使用此手艺,一样合用于运转会见者到场大概在线挂号的情形,而且将他们到场用户列表。关于这个成绩在此不做进一步切磋。
利用数据库处置全体的历程长短常复杂的!当用户供应了登录信息后,利用SQL的SELECT命令在数据库中查找输出的用户名,并取回婚配的口令。假如取回的口令与输出的口令分歧,就同意他们进进下一步:
strSQL="SELECTsPasswordFROMUsers"_&"WHEREsUsername="&Request("v1")&""
到场登录信息的成绩
但是,到场新用户是一个小困难。假如发明用户在数据库中不存在,而且决意利用ASP主动到场他们,我们就必需注重了。换言之,当用户填写新的信息时,大概有别的的用户利用一样的用户名在做一样的事变,并且后者举措快,起首在数据库中保留了信息,如许,前者的到场事情就不克不及完成。
有2个明显的办法能够制止这个征象。一个办法是:主动创建一个带空口令的新纪录,用户往后能够修正它:
strSQL="INSERTINTOUsers(sUserName,sPassword)"_&"VALUES("&Request("v1")&",null)"
一个更好的办法是:假如新纪录创立乐成,就利用一个历程前往一个特别的数值(好比用户名),大概,假如不乐成,前往毛病信息。如许,用户就能够选择一个新的用户名。上面的例子是利用SQLServer存储历程,假如到场新纪录乐成,就前往用户名,假如用户名已存在,就前往空字符串:
CREATEPROCEDUREAddUser@s_uservarchar(12),@s_pwordvarchar(12)AS
IFEXISTS(SELECT*FROMUsersWHEREsUserName=@s_user)
SELECT
ELSE
BEGIN
INSERTINTOUsers(sUserName,sPassword)
VALUES(@s_user,@s_pword)
SELECTsUserNameFROMUsersWHEREsUsername=@s_user
END
如许就能够在ADO中实行这个历程,并反省前往值来确认是不是增加乐成。假如失利,就关照用户选择一个新用户名。这里有一些代码形貌了怎样利用上述的存储历程,你能够从本文下载的文件中找到这些代码。
以下是从表单中搜集的数据:
strUserName="NewUser1"
strPassword="ThePassword"
界说数据库毗连:
strConnect="DRIVER={SQLServer};SERVER=yourserver;"_
&"DATABASE=yourdatabase;UID=yourusername;PWD=yourpassword;"
创建并翻开数据库毗连:
SetoCon=Server.CreateObject("ADODB.Connection")
oCon.OpenstrConnect
创建command工具,设置属性
SetoCmd=Server.CreateObject("ADODB.Command")
oCmd.ActiveConnection=oConouropenconnection
oCmd.CommandType=4itsastoredprocedure
oCmd.CommandText="AddUser"theprocedurename
供应参数实行command工具,失掉了局:
SetoRs=oCmd.Execute(lngRecsAffected,Array(strUserName,strPassword))
strResult=Trim(oRs.Fields(0))ADOmayaddaspacetotheresult
显现了局,假如毛病,显现“userexistswarning”:
IfstrResult=""Then
Response.Write"UserAlreadyExists"
Else
Response.Write"Addednewuser:〈B〉"&strResult&"〈/B〉"
EndIf
%〉Windows本身的所有问题都会一成不变的也累加到了它的身上。安全性、稳定性、跨平台性都会因为与NT的捆绑而显现出来; |
|