
摘要
本文实现了一个实用的用户登录时间记录功能。当用户成功登录后,系统自动记录登录时间并在主页显示。通过Session
存储登录时间,结合Page_Load
事件实现动态展示,完整演示了ASP.NET核心技术的应用场景。
实际场景分析
在用户管理系统、电商平台等需要身份验证的系统中,记录并展示用户登录时间是基础需求。例如:
- 银行系统需要记录登录时间用于安全审计
- 社交平台在用户主页显示"上次登录时间"提升用户体验
- 后台管理系统追踪管理员操作时间
实现步骤与代码
创建登录页面(Login.aspx)
html
<!-- Login.aspx -->
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>
<!DOCTYPE html>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h3>系统登录</h3>
<asp:TextBox ID="txtUsername" runat="server" placeholder="用户名" />
<br />
<asp:TextBox ID="txtPassword" runat="server" TextMode="Password" placeholder="密码" />
<br />
<asp:Button ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />
<asp:Label ID="lblMessage" runat="server" ForeColor="Red" />
</div>
</form>
</body>
</html>
登录逻辑(Login.aspx.cs)
csharp
// Login.aspx.cs
protected void btnLogin_Click(object sender, EventArgs e)
{
// 实际项目应连接数据库验证
if (txtUsername.Text == "admin" && txtPassword.Text == "123456")
{
// 记录登录时间到Session
Session["LoginTime"] = DateTime.Now;
Session["Username"] = txtUsername.Text;
// 跳转到主页
Response.Redirect("Default.aspx");
}
else
{
lblMessage.Text = "用户名或密码错误!";
}
}
主页显示逻辑(Default.aspx.cs)
csharp
// Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
// 检查用户是否登录
if (Session["LoginTime"] == null)
{
Response.Redirect("Login.aspx");
}
// 获取并格式化登录时间
DateTime loginTime = (DateTime)Session["LoginTime"];
string welcomeMsg = $"欢迎 {Session["Username"]}," +
$"您于 {loginTime:yyyy-MM-dd HH:mm:ss} 登录系统";
// 输出到页面
Response.Write(welcomeMsg);
}
代码解析
Session机制
csharp
Session["LoginTime"] = DateTime.Now;
- 利用ASP.NET内置Session对象存储用户登录时间
- 数据保存在服务器内存中,每个用户独立存储
- 默认20分钟无操作自动过期
页面跳转控制
csharp
Response.Redirect("Login.aspx");
- 未登录用户访问主页时强制跳转登录页
- 防止未授权访问,增强系统安全性
时间格式化输出
csharp
$"{loginTime:yyyy-MM-dd HH:mm:ss}"
- 使用C#6.0字符串插值特性
- 自定义格式显示完整时间信息(年-月-日 时:分:秒)
页面生命周期
Page_Load
事件在页面加载时触发:
- 优先执行身份验证
- 动态生成个性化欢迎信息
- 避免在视图层混入业务逻辑
测试用例与效果
测试场景 | 输入数据 | 预期结果 |
---|---|---|
正确登录 | admin/123456 | 显示欢迎信息+登录时间 |
错误密码 | admin/111111 | 提示"用户名或密码错误" |
未登录直接访问主页 | 无 | 自动跳转到登录页 |
登录后刷新主页 | 已登录状态 | 保持显示原始登录时间 |
实际效果:
yaml
欢迎 admin,您于 2025-06-04 14:30:22 登录系统
性能分析
时间复杂度 O(1)
- Session读取和DateTime操作均为常数时间
- 不受数据量影响
空间复杂度 O(N)
- N为并发用户数
- 每个用户Session约占用50字节
技术拓展建议
持久化存储
csharp
// 将登录记录保存到数据库
string sql = @"INSERT INTO LoginLog (Username, LoginTime)
VALUES (@user, @time)";
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.AddWithValue("@user", Session["Username"]);
cmd.Parameters.AddWithValue("@time", DateTime.Now);
cmd.ExecuteNonQuery();
}
增强安全性
- 使用
HTTPS
加密传输 - 在
web.config
配置Session超时时间
xml
<system.web>
<sessionState timeout="30" />
</system.web>
前端优化
使用Literal控件替代Response.Write:
aspx
<!-- Default.aspx -->
<asp:Literal ID="ltWelcome" runat="server" />
csharp
// Default.aspx.cs
ltWelcome.Text = welcomeMsg;
总结
本文实现了ASP.NET中用户登录时间的记录与展示功能,核心要点包括:
- 合理使用Session保持用户状态
- 利用Page_Load事件处理核心逻辑
- 实现安全的页面跳转控制
- 采用响应式设计确保移动端兼容性