You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core中获取Cookie过期时间并实现自动登录功能

ASP.NET Core 自动登录功能实现方案

之前方案失效的核心原因

浏览器向服务器发起请求时,只会携带Cookie的键值对内容,不会传递Cookie的有效期、路径、域名等元属性,这些属性仅由浏览器本地存储并管理Cookie生命周期,过期的Cookie浏览器会自动清理,根本不会发送到服务器端。所以你尝试读取Request.Cookies里的Expires属性的逻辑从根本上就行不通,ASP.NET Core的IRequestCookieCollection也压根没有提供Expires属性的访问接口。

额外安全提醒:你当前代码直接把用户明文密码存在Cookie里是严重的安全漏洞,极易造成用户信息泄露,生产环境绝对不能这么用。

正确实现步骤

1. 登录接口优化(可选但强烈建议)

不要存储明文密码,推荐两种方案:

  • 直接使用ASP.NET Core Identity自带的「记住我」功能,框架会自动处理安全Cookie的加密、有效期管理,只需要在PasswordSignInAsync方法里把isPersistent参数设为true即可。
  • 如果不想引入Identity,可以生成一个加密的用户身份标识存在Cookie里,替代明文的账号密码。

如果暂时保留原有逻辑,登录接口不需要改动,Cookie的Expires设置已经正确,浏览器会自动管理10天有效期。

2. 首页逻辑修改

只要Request.Cookies中能读取到对应的Cookie键,就说明Cookie还在有效期内,不需要额外判断过期时间,直接验证用户信息后跳转即可:

public IActionResult Index()
{
    // 能拿到IsRemember且值为True,说明Cookie未过期
    if (Request.Cookies.TryGetValue("IsRemember", out string isRemember) && isRemember == "True")
    {
        // 读取Cookie中的账号密码(仅演示,生产环境请替换为加密Token验证)
        if (Request.Cookies.TryGetValue("UserEmail", out string email) 
            && Request.Cookies.TryGetValue("UserPassword", out string password))
        {
            // 这里加你的账号密码校验逻辑,校验通过就跳转仪表盘
            var user = 你的用户校验方法(email, password);
            if (user != null)
            {
                // 可以在这里补充登录态写入Session或者 ClaimsPrincipal的逻辑
                return RedirectToAction("Index", "Dashboard");
            }
            // 校验失败说明Cookie内容被篡改,清理失效Cookie
            Response.Cookies.Delete("IsRemember");
            Response.Cookies.Delete("UserEmail");
            Response.Cookies.Delete("UserPassword");
        }
    }
    // 未触发自动登录就返回首页
    return View();
}

内容的提问来源于stack exchange,提问作者J Mak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:54:00