ASP网站制作之ASP中浅易用户会见把持-2
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的捆绑而显现出来; 如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。 Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名") 学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。 用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的 交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。 尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。 如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
页:
[1]