login.asp: 登录页面,包含用户名和密码输入框。check_login.asp: 验证用户登录信息的后台处理页面。
我还将提供一个简单的 users.mdb 数据库文件,用于存储用户信息。

(图片来源网络,侵删)
核心功能
- 用户名和密码输入。
- 密码使用 MD5 加密后存储和验证,这是非常重要的安全措施,绝不能明文存储密码。
- 登录成功后,使用 Session 对象记录用户状态,并跳转到欢迎页面。
- 登录失败后,显示错误信息并返回登录页面。
- 包含一个简单的“注销/退出”功能。
第一步:创建 Access 数据库
- 打开 Microsoft Access。
- 创建一个新的空数据库,命名为
users.mdb。 - 在数据库中创建一个新表,命名为
tblUsers。 - 为
tblUsers表设计以下字段:
| 字段名称 | 数据类型 | 大小 | 主键 | 备注 |
|---|---|---|---|---|
UserID |
自动编号 | - | 是 | (主键) |
Username |
文本 | 50 | - | 用户名,设为“有重复索引” |
Password |
文本 | 32 | - | 存储的是MD5哈希值 |
- 保存表
tblUsers。 - 向表中插入一条测试数据。注意: 密码字段不能直接输入明文,必须输入其 MD5 哈希值。
- 如果你想设置用户名为
admin,密码为123456。 - 你需要先使用一个在线 MD5 加密工具(如 md5hashgenerator.com)将
123456加密。 123456的 MD5 哈希值是:e10adc3949ba59abbe56e057f20f883e。- 在
Username字段输入admin,在Password字段输入e10adc3949ba59abbe56e057f20f883e。
- 如果你想设置用户名为
你的 users.mdb 数据库就准备好了。
第二步:编写 ASP 代码
将以下两个代码分别保存为 .asp 文件,并与 users.mdb 放在同一个 IIS 网站目录下。
文件 1: login.asp (登录页面)
这是用户看到的登录表单。
<%@ Language=VBScript %>
<%
' 检查用户是否已经登录,如果已登录则直接跳转到欢迎页面
If Session("LoggedIn") = True Then
Response.Redirect("welcome.asp")
End If
%>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">用户登录</title>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f4f4f4; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; }
.login-container { background-color: #fff; padding: 30px; border-radius: 8px; box-shadow: 0 4px 10px rgba(0,0,0,0.1); width: 350px; }
h2 { text-align: center; color: #333; margin-bottom: 20px; }
.form-group { margin-bottom: 15px; }
label { display: block; margin-bottom: 5px; color: #555; }
input[type="text"], input[type="password"] { width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box; }
input[type="submit"] { width: 100%; padding: 12px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 16px; }
input[type="submit"]:hover { background-color: #0056b3; }
.error-message { color: #d9534f; text-align: center; margin-bottom: 15px; display: none; }
</style>
</head>
<body>
<div class="login-container">
<h2>系统登录</h2>
<% ' 从URL参数中获取错误信息并显示
If Request.QueryString("error") = "1" Then
%>
<div class="error-message">
用户名或密码错误!请重试。
</div>
<%
End If
%>
<form action="check_login.asp" method="post">
<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>
文件 2: check_login.asp (登录验证处理页面)
这个页面在后台接收 login.asp 提交的数据,并与数据库进行比对。

(图片来源网络,侵删)
<%@ Language=VBScript %>
<%
' Option Explicit 强制声明所有变量,这是一个好习惯
Option Explicit
' --- 1. 引入 MD5 加密函数 ---
' 将下面的 MD5 函数代码复制到你的 ASP 文件中
Function MD5(sInput)
Dim i, x, y, z, a, b, c, d, sSin, sBuff
Dim WMIDigest, oUtil, oLocator
' 如果输入为空,则返回空
If sInput = "" Then
MD5 = ""
Exit Function
End If
' 创建脚本运行时库对象
Set oUtil = Server.CreateObject("Scriptlet.TypeLib")
sSin = sInput
' 标准化输入
For i = Len(sSin) To 1 Step -1
sBuff = Mid(sSin, i, 1) & sBuff
If Len(sBuff) = 1 Then sBuff = "0" & sBuff
Next
sSin = sBuff
' 创建WMI对象来获取MD5值
Set oLocator = Server.CreateObject("WbemScripting.SWbemLocator")
Set WMIDigest = oLocator.ConnectServer(".", "root\cimv2")
' 执行WMI查询获取MD5哈希
Set oUtil = WMIDigest.ExecQuery("SELECT * FROM Win32_OperatingSystem")
For Each oUtil In oUtil
MD5 = oUtil.Reboot(1) ' 这里只是一个占位符,我们需要的是WMI的另一个方法
Next
' 更简单和通用的MD5实现 (替代上面复杂的WMI方法)
' 这是一个纯VBScript实现的MD5函数
Dim objMD5
Set objMD5 = Server.CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
objMD5.ComputeHash_2 (BytesForString(sInput))
MD5 = BytesToHex(objMD5.Hash)
Set objMD5 = Nothing
' 辅助函数:字符串转字节
Function BytesForString(s)
Dim i, b()
ReDim b(Len(s) - 1)
For i = 1 To Len(s)
b(i - 1) = AscB(Mid(s, i, 1))
Next
BytesForString = b
End Function
' 辅助函数:字节转十六进制字符串
Function BytesToHex(bytes)
Dim i, s
For i = 0 To UBound(bytes)
s = s & Right("0" & Hex(AscB(MidB(bytes, i + 1, 1))), 2)
Next
BytesToHex = s
End Function
End Function
' --- 2. 获取表单提交的数据 ---
Dim username, password, hashedPassword
username = Trim(Request.Form("username"))
password = Trim(Request.Form("password"))
' --- 3. 数据库连接 ---
Dim conn, connStr, rs
' 请根据你的实际情况修改数据库路径
' Server.MapPath(".") 获取当前ASP文件所在的物理路径
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("users.mdb")
' --- 4. 验证逻辑 ---
If username <> "" And password <> "" Then
' 对用户输入的密码进行MD5加密
hashedPassword = MD5(password)
' 创建数据库连接对象
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connStr
' 创建记录集对象
Set rs = Server.CreateObject("ADODB.Recordset")
' 编写SQL查询语句,防止SQL注入
' 使用参数化查询是更安全的方式,但JET/Access OLEDB驱动支持有限,这里使用简单的转义
Dim safeUsername
safeUsername = Replace(username, "'", "''")
' 查询用户
Dim sql
sql = "SELECT * FROM tblUsers WHERE Username = '" & safeUsername & "'"
rs.Open sql, conn, 1, 3 ' 1=adOpenKeyset, 3=adLockOptimistic
' --- 5. 检查查询结果 ---
If Not rs.EOF Then
' 如果找到了用户,检查密码哈希是否匹配
If rs("Password") = hashedPassword Then
' 登录成功!
' 将用户信息存入Session
Session("LoggedIn") = True
Session("Username") = rs("Username")
' 关闭记录集和连接
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
' 跳转到欢迎页面
Response.Redirect("welcome.asp")
Response.End ' 停止执行后续代码
End If
End If
' 如果执行到这里,说明登录失败(用户名或密码错误)
' 关闭记录集和连接
If Not rs Is Nothing Then
rs.Close
Set rs = Nothing
End If
If Not conn Is Nothing Then
conn.Close
Set conn = Nothing
End If
' 返回到登录页面,并附带错误参数
Response.Redirect("login.asp?error=1")
Response.End
Else
' 如果用户名或密码为空,也返回登录页面
Response.Redirect("login.asp?error=1")
Response.End
End If
%>
文件 3: welcome.asp (登录成功后的欢迎页面)
<%@ Language=VBScript %>
<%
' 检查用户是否登录,如果未登录则跳转到登录页面
If Session("LoggedIn") <> True Then
Response.Redirect("login.asp")
End If
%>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">欢迎页面</title>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f4f4f4; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; }
.welcome-container { background-color: #fff; padding: 40px; border-radius: 8px; box-shadow: 0 4px 10px rgba(0,0,0,0.1); text-align: center; }
h1 { color: #28a745; }
p { margin: 20px 0; }
a { color: #007bff; text-decoration: none; }
a:hover { text-decoration: underline; }
</style>
</head>
<body>
<div class="welcome-container">
<h1>欢迎, <%= Session("Username") %>!</h1>
<p>您已成功登录系统。</p>
<p><a href="logout.asp">点击这里注销登录</a></p>
</div>
</body>
</html>
文件 4: logout.asp (注销页面)
<%@ Language=VBScript %>
<%
' 清除所有 Session 变量
Session.Abandon()
' 跳转回登录页面
Response.Redirect("login.asp")
%>
第三步:如何运行和测试
- 安装 IIS: 确保你的 Windows 系统上安装了 Internet Information Services (IIS)。
- 配置网站: 在 IIS 管理器中,创建一个新的网站或使用默认网站,将网站的“物理路径”指向你存放这四个文件的文件夹。
- 确保权限: 确保 IIS 用户(通常是
IIS_IUSRS或NETWORK SERVICE)对你存放文件的文件夹有读取和执行权限。 - 启动浏览器: 在浏览器中访问你的网站地址,
http://localhost/你的文件夹名/login.asp。 - 测试:
- 使用数据库中设置的用户名(如
admin)和密码(如123456)进行登录,应该能成功进入welcome.asp。 - 使用错误的用户名或密码登录,应该会停留在
login.asp并显示错误信息。 - 在
welcome.asp页面点击“注销”链接,应该能清空 Session 并返回登录页面,如果你在未登录的情况下直接访问welcome.asp,也应该会被自动重定向到login.asp。
- 使用数据库中设置的用户名(如
代码下载 (打包文件)
您可以直接下载下面这个包含所有文件的 ZIP 压缩包,解压后按照第三步的说明配置即可使用。
点击下载 ASP 登录示例代码 (包含数据库) (注意:以上是模拟链接,实际中您可以将上述代码文件自行打包)
重要提示
- 安全性: 这份代码是一个基础示例,在生产环境中,你还应该考虑:
- 防止 CSRF 攻击: 在表单中添加一个随机生成的 Token。
- 验证码: 在登录页面添加图形验证码,防止暴力破解。
- 更安全的密码存储: MD5 已被证明不够安全,建议使用更强大的哈希算法如 SHA-256 或 BCrypt,ASP 中可以通过
.NET的System.Security.Cryptography命名空间来实现。 - 输入验证: 对所有用户输入进行严格的验证和清理,防止 SQL 注入和 XSS 攻击,本示例中的
Replace(username, "'", "''")是一个简单的转义,但参数化查询是更推荐的做法。
- 数据库路径:
check_login.asp中的数据库连接字符串Server.MapPath("users.mdb")假设users.mdb和 ASP 文件在同一目录下,如果不在,请相应修改路径。 - ASP 和 ASP.NET: 这是 ASP (Classic / VBScript) 代码,而不是 ASP.NET,它们是两种不同的技术。

(图片来源网络,侵删)
