|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
使用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 = "SELECT sPassword FROM Users " _ & "WHERE sUsername = " & Request("v1") & "" 加入登录信息的问题 然而,加入新用户是一个小难题。假如发现用户在数据库中不存在,并且决定使用ASP自动加入他们,我们就必须注重了。换言之,当用户填写新的信息时,可能有另外的用户使用同样的用户名在做同样的事情,而且后者动作快,首先在数据库中保存了信息,这样,前者的加入工作就不能完成。 有2个显然的方式可以避免这个现象。一个方式是:自动建立一个带空口令的新记录,用户日后可以修改它: strSQL = "INSERT INTO Users (sUserName, sPassword) " _ & "VALUES(" & Request("v1") & ", null)" 一个更好的方式是:假如新记录创建成功,就使用一个过程返回一个特别的数值(比如用户名),或者,假如不成功,返回错误信息。这样,用户就可以选择一个新的用户名。下面的例子是使用SQL Server存储过程,假如加入新记录成功,就返回用户名,假如用户名已经存在,就返回空字符串: CREATE PROCEDURE AddUser @s_user varchar(12), @s_pword varchar (12) AS IF EXISTS (SELECT * FROM Users WHERE sUserName = @s_user) SELECT ELSE BEGIN INSERT INTO Users (sUserName, sPassword) VALUES(@s_user, @s_pword) SELECT sUserName FROM Users WHERE sUsername = @s_user END 这样就可以在ADO中执行这个过程,并检查返回值来确认是否添加成功。假如失败,就通知用户选择一个新用户名。这里有一些代码描述了如何使用上述的存储过程,你可以从本文下载的文件中找到这些代码。 以下是从表单中收集的数据: strUserName = "NewUser1" strPassword = "ThePassword" 定义数据库连接: strConnect = "DRIVER={SQL Server};SERVER= yourserver ; " _ & "DATABASE= yourdatabase;UID= yourusername;PWD= yourpassword ;" 建立并打开数据库连接: Set oCon = Server.CreateObject("ADODB.Connection") oCon.Open strConnect 建立command对象,设置属性 Set oCmd = Server.CreateObject("ADODB.Command") oCmd.ActiveConnection = oCon our open connection oCmd.CommandType = 4 its a stored procedure oCmd.CommandText = "AddUser" the procedure name 提供参数执行command对象,得到结果: Set oRs = oCmd.Execute (lngRecsAffected, Array(strUserName,strPassword)) strResult = Trim(oRs.Fields(0)) ADO may add a space to the result 显示结果,假如错误,显示“user exists warning”: If strResult = "" Then Response.Write "User Already Exists" Else Response.Write "Added new user: < B >" & strResult & "< /B >" End If % > 返回类别: 教程 上一教程: ASP 3.0高级编程(十四) 下一教程: 浏览器性能组件 您可以阅读与"ASP中简易用户访问控制-2"相关的教程: · ASP中简易用户访问控制-1 · 用ASP让用户访问指定页面 · 用ASP实现WEB页面分用户权限的访问 · ASP网页访问权的控制 · 在ASP中如何访问Novell下的数据库 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |