本教程将带您一步步,从零开始制作一个完整的ASP+Access用户登录系统,我们将涵盖数据库设计、登录页面、登录验证逻辑以及登录成功后的欢迎页面。

(图片来源网络,侵删)
目录
- 准备工作
- 环境要求
- 工具准备
- 第一步:创建Access数据库和用户表
- 第二步:设计登录页面
- 第三步:编写登录验证的ASP代码
- 第四步:创建登录成功后的欢迎页面
- 第五步:创建安全退出功能
- 完整代码示例与总结
- 重要安全提示
准备工作
在开始之前,请确保您拥有以下环境和工具:
环境要求
- Web服务器: Internet Information Services (IIS),这是Windows系统上运行ASP的标准Web服务器。
- 如何启用IIS: 在Windows 10/11中,进入“控制面板” -> “程序” -> “启用或关闭Windows功能”,勾选“Internet Information Services”即可。
- ASP支持: IIS默认支持ASP,无需额外配置。
- 数据库引擎: Microsoft Access 数据库引擎,确保您的服务器上安装了与您的Access数据库版本(如 .accdb 或 .mdb)对应的引擎。
工具准备
- 文本编辑器: 如 Visual Studio Code, Sublime Text, 或记事本。
- 数据库工具: Microsoft Access 软件(用于创建和管理数据库),或者可以直接用代码创建。
- 浏览器: 用于测试您的网页。
第一步:创建Access数据库和用户表
我们将创建一个简单的数据库来存储用户信息。
- 打开 Microsoft Access。
- 创建一个新的空白数据库,命名为
mydb.accdb。 - 点击“创建”选项卡,选择“表设计”。
- 在设计视图中,创建以下字段:
| 字段名称 | 数据类型 | 说明 |
|---|---|---|
id |
自动编号 | 主键,唯一标识每个用户 |
username |
文本 | 用户名,"admin" |
password |
文本 | 密码,"123456" |
realname |
文本 | 真实姓名,"管理员" |
- 保存表,命名为
users。 - 切换到“数据表视图”,添加一个测试用户:
username:adminpassword:123456realname:管理员
您的数据库和用户表已经准备好了,将 mydb.accdb 文件放置到您的IIS网站根目录下(C:\inetpub\wwwroot\)。
第二步:设计登录页面
创建一个名为 login.asp 的文件,这是用户输入用户名和密码的界面。

(图片来源网络,侵删)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">用户登录</title>
<style>
body { font-family: Arial, sans-serif; background-color: #f4f4f4; }
.login-container { width: 300px; margin: 100px auto; padding: 20px; background: #fff; border-radius: 5px; box-shadow: 0 0 10px rgba(0,0,0,0.1); }
h2 { text-align: center; }
.form-group { margin-bottom: 15px; }
label { display: block; margin-bottom: 5px; }
input[type="text"], input[type="password"] { width: 100%; padding: 8px; box-sizing: border-box; border: 1px solid #ddd; border-radius: 3px; }
input[type="submit"] { width: 100%; padding: 10px; background-color: #5cb85c; color: white; border: none; border-radius: 3px; cursor: pointer; }
input[type="submit"]:hover { background-color: #4cae4c; }
.error-message { color: red; text-align: center; margin-bottom: 10px; display: none; }
</style>
</head>
<body>
<div class="login-container">
<h2>用户登录</h2>
<!-- 使用表单提交数据到自身或验证页面 -->
<form action="check_login.asp" method="post">
<div class="error-message" id="errorMsg">用户名或密码错误!</div>
<div class="form-group">
<label for="username">用户名:</label>
<input type="text" id="username" name="username" required>
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" id="password" name="password" required>
</div>
<input type="submit" value="登录">
</form>
</div>
</body>
</html>
说明:
action="check_login.asp": 表单数据将被提交到我们下一步要创建的check_login.asp页面进行处理。method="post": 使用 POST 方法提交数据,这样用户名和密码不会显示在URL地址栏中,更安全。name="username"和name="password": 这两个name属性非常重要,因为ASP代码将使用它们来获取用户输入的值。
第三步:编写登录验证的ASP代码
这是整个登录系统的核心,创建一个名为 check_login.asp 的文件。
<%
' 1. 设置编码,防止中文乱码
Session.CodePage = 65001
Response.Charset = "UTF-8"
' 2. 获取从login.asp页面提交过来的用户名和密码
Dim username, password
username = Request.Form("username")
password = Request.Form("password")
' --- 安全性检查:防止SQL注入 ---
' 这是一个简单的过滤,更高级的可以使用参数化查询,但ASP+Access实现起来较复杂
' 这里我们主要做示例,实际项目中应考虑更安全的方案
username = Replace(username, "'", "''")
password = Replace(password, "'", "''")
' 3. 检查用户名和密码是否为空
If username = "" Or password = "" Then
Response.Write "<script>alert('用户名和密码不能为空!'); history.back();</script>"
Response.End
End If
' 4. 连接数据库
Dim conn, dbPath, connStr, rs
dbPath = Server.MapPath("mydb.accdb") ' 获取数据库在服务器上的物理路径
' 创建连接字符串
' Provider=Microsoft.ACE.OLEDB.12.0 是 .accdb 文件的驱动
' 如果是 .mdb 文件,请使用 Provider=Microsoft.Jet.OLEDB.4.0
connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath
On Error Resume Next ' 错误处理,防止数据库打开失败导致页面崩溃
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connStr
If Err.Number <> 0 Then
Response.Write "数据库连接失败,请检查路径和权限!"
Response.End
End If
On Error GoTo 0
' 5. 编写SQL查询语句,检查用户是否存在
Dim sql
sql = "SELECT * FROM users WHERE username = '" & username & "' AND password = '" & password & "'"
' 6. 执行查询并获取结果
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 1, 1 ' 1,1 表示只读,静态游标
' 7. 判断查询结果
If rs.EOF And rs.BOF Then
' 如果记录集为空,表示没有找到匹配的用户
' 返回登录页面并提示错误
Response.Redirect "login.asp?error=1"
Else
' 如果找到了匹配的用户,登录成功
' 将用户信息存入Session,以便在后续页面中使用
Session("isLogin") = True
Session("username") = rs("username")
Session("realname") = rs("realname")
' 跳转到登录成功后的欢迎页面
Response.Redirect "welcome.asp"
End If
' 8. 关闭并释放对象
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
%>
代码详解:
Session: ASP的Session对象用于在用户访问网站的整个过程中存储特定用户的信息,我们将登录状态和用户名存入Session,这样其他页面就能知道用户是否已登录。Server.MapPath(): 将网站相对路径(如mydb.accdb)转换为服务器上的绝对物理路径。ADODB.Connection和ADODB.Recordset: 这是ADO(ActiveX Data Objects)的核心对象,用于连接和操作数据库。rs.EOF和rs.BOF:EOF(End of File) 和BOF(Beginning of File) 是记录集的指针属性,如果两者都为True,表示记录集是空的,即没有查询到数据。
第四步:创建登录成功后的欢迎页面
创建一个名为 welcome.asp 的文件,这个页面只有在用户成功登录后才能看到。

(图片来源网络,侵删)
<%
' 检查用户是否已登录
' 如果Session("isLogin")不存在或为False,则重定向到登录页面
If Not Session("isLogin") Then
Response.Redirect "login.asp"
Response.End
End If
%>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">欢迎页面</title>
<style>
body { font-family: Arial, sans-serif; background-color: #e9ecef; text-align: center; padding-top: 100px; }
.welcome-container { background: #fff; padding: 30px; border-radius: 5px; display: inline-block; box-shadow: 0 0 15px rgba(0,0,0,0.1); }
h1 { color: #333; }
p { font-size: 1.2em; margin: 20px 0; }
a { color: #007bff; text-decoration: none; }
a:hover { text-decoration: underline; }
</style>
</head>
<body>
<div class="welcome-container">
<h1>欢迎, <%= Session("realname") %>!</h1>
<p>您已成功登录系统。</p>
<p>欢迎您, <%= Session("username") %>!</p>
<a href="logout.asp">安全退出</a>
</div>
</body>
</html>
说明:
<% If Not Session("isLogin") Then ... %>: 这是页面最顶部的关键代码,它检查Session中的登录状态,如果用户未登录(比如直接在浏览器地址栏输入welcome.asp的访问地址),就会被强制跳转到login.asp页面,这起到了一个简单的权限控制作用。
第五步:创建安全退出功能
创建一个名为 logout.asp 的文件,用于清除Session并让用户退出。
<% ' 1. 销毁Session,清除所有用户会话信息 Session.Abandon() ' 2. 跳转回登录页面 Response.Redirect "login.asp" %>
说明:
Session.Abandon(): 此方法会立即终止当前用户的会话,并释放所有Session对象占用的资源。
完整代码示例与总结
您有了以下4个文件:
mydb.accdb(数据库)login.asp(登录界面)check_login.asp(登录验证逻辑)welcome.asp(登录成功页面)logout.asp(退出登录)
将它们全部放在IIS网站的根目录下,在浏览器中访问 http://localhost/login.asp,您就可以测试整个登录流程了。
总结流程:
- 用户在
login.asp输入用户名密码,点击“登录”。 - 表单将数据POST到
check_login.asp。 check_login.asp连接数据库,查询用户信息。- 如果查询失败:重定向回
login.asp并附带错误信息。 - 如果查询成功:将用户信息存入
Session,然后重定向到welcome.asp。 welcome.asp检查Session,确认用户已登录后,显示欢迎信息。- 用户点击“安全退出”,访问
logout.asp,logout.asp销毁Session并重定向回login.asp。
重要安全提示
这个教程是基础教学,请务必注意以下安全问题:
-
SQL注入:
check_login.asp中的SQL查询是通过字符串拼接实现的,这是极其不安全的,黑客可以通过在用户名或密码中输入' OR '1'='1这样的恶意代码来绕过登录验证。- 解决方案: 在实际项目中,应使用参数化查询,虽然ASP+Access的参数化查询比SQL Server麻烦,但仍是必须的。
-
密码明文存储: 我们的数据库中直接存储了明文密码(
123456),一旦数据库泄露,所有用户密码都会暴露。- 解决方案: 在存储密码前,必须对其进行哈希加密(例如使用MD5, SHA256等算法)。
check_login.asp在验证时,应该将用户输入的密码也用同样的哈希算法加密后,再去和数据库中存储的哈希值进行比较。
- 解决方案: 在存储密码前,必须对其进行哈希加密(例如使用MD5, SHA256等算法)。
-
Session劫持: 如果Session ID被泄露,他人就可能冒充已登录的用户。
- 解决方案: 在登录成功后,可以生成一个随机的
Token并存入Session和数据库/Cookie中,后续请求都验证这个Token。
- 解决方案: 在登录成功后,可以生成一个随机的
-
数据库路径暴露: 直接将
.accdb文件放在网站根目录下是不安全的,容易被下载。- 解决方案: 应将数据库文件放在网站根目录之外的目录中,并设置正确的IIS/NTFS文件权限,只允许IIS用户(如IIS_IUSRS)读取。
尽管有这些安全隐患,但通过这个完整的教程,您已经掌握了使用ASP和Access构建一个基础登录系统的核心流程。
