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

asp access登录制作教程
(图片来源网络,侵删)

目录

  1. 准备工作
    • 环境要求
    • 工具准备
  2. 第一步:创建Access数据库和用户表
  3. 第二步:设计登录页面
  4. 第三步:编写登录验证的ASP代码
  5. 第四步:创建登录成功后的欢迎页面
  6. 第五步:创建安全退出功能
  7. 完整代码示例与总结
  8. 重要安全提示

准备工作

在开始之前,请确保您拥有以下环境和工具:

环境要求

  • 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数据库和用户表

我们将创建一个简单的数据库来存储用户信息。

  1. 打开 Microsoft Access。
  2. 创建一个新的空白数据库,命名为 mydb.accdb
  3. 点击“创建”选项卡,选择“表设计”。
  4. 在设计视图中,创建以下字段:
字段名称 数据类型 说明
id 自动编号 主键,唯一标识每个用户
username 文本 用户名,"admin"
password 文本 密码,"123456"
realname 文本 真实姓名,"管理员"
  1. 保存表,命名为 users
  2. 切换到“数据表视图”,添加一个测试用户:
    • username: admin
    • password: 123456
    • realname: 管理员

您的数据库和用户表已经准备好了,将 mydb.accdb 文件放置到您的IIS网站根目录下(C:\inetpub\wwwroot\)。


第二步:设计登录页面

创建一个名为 login.asp 的文件,这是用户输入用户名和密码的界面。

asp access登录制作教程
(图片来源网络,侵删)
<!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.ConnectionADODB.Recordset: 这是ADO(ActiveX Data Objects)的核心对象,用于连接和操作数据库。
  • rs.EOFrs.BOF: EOF (End of File) 和 BOF (Beginning of File) 是记录集的指针属性,如果两者都为 True,表示记录集是空的,即没有查询到数据。

第四步:创建登录成功后的欢迎页面

创建一个名为 welcome.asp 的文件,这个页面只有在用户成功登录后才能看到。

asp access登录制作教程
(图片来源网络,侵删)
<%
' 检查用户是否已登录
' 如果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个文件:

  1. mydb.accdb (数据库)
  2. login.asp (登录界面)
  3. check_login.asp (登录验证逻辑)
  4. welcome.asp (登录成功页面)
  5. logout.asp (退出登录)

将它们全部放在IIS网站的根目录下,在浏览器中访问 http://localhost/login.asp,您就可以测试整个登录流程了。

总结流程:

  1. 用户在 login.asp 输入用户名密码,点击“登录”。
  2. 表单将数据POST到 check_login.asp
  3. check_login.asp 连接数据库,查询用户信息。
  4. 如果查询失败:重定向回 login.asp 并附带错误信息。
  5. 如果查询成功:将用户信息存入 Session,然后重定向到 welcome.asp
  6. welcome.asp 检查 Session,确认用户已登录后,显示欢迎信息。
  7. 用户点击“安全退出”,访问 logout.asplogout.asp 销毁 Session 并重定向回 login.asp

重要安全提示

这个教程是基础教学,请务必注意以下安全问题

  1. SQL注入: check_login.asp 中的SQL查询是通过字符串拼接实现的,这是极其不安全的,黑客可以通过在用户名或密码中输入 ' OR '1'='1 这样的恶意代码来绕过登录验证。

    • 解决方案: 在实际项目中,应使用参数化查询,虽然ASP+Access的参数化查询比SQL Server麻烦,但仍是必须的。
  2. 密码明文存储: 我们的数据库中直接存储了明文密码(123456),一旦数据库泄露,所有用户密码都会暴露。

    • 解决方案: 在存储密码前,必须对其进行哈希加密(例如使用MD5, SHA256等算法)。check_login.asp 在验证时,应该将用户输入的密码也用同样的哈希算法加密后,再去和数据库中存储的哈希值进行比较。
  3. Session劫持: 如果Session ID被泄露,他人就可能冒充已登录的用户。

    • 解决方案: 在登录成功后,可以生成一个随机的Token并存入Session和数据库/Cookie中,后续请求都验证这个Token
  4. 数据库路径暴露: 直接将.accdb文件放在网站根目录下是不安全的,容易被下载。

    • 解决方案: 应将数据库文件放在网站根目录之外的目录中,并设置正确的IIS/NTFS文件权限,只允许IIS用户(如IIS_IUSRS)读取。

尽管有这些安全隐患,但通过这个完整的教程,您已经掌握了使用ASP和Access构建一个基础登录系统的核心流程。