首页 > 解决方案 > 如何将 ASP.NET 身份验证 cookie 设置为在特定日期和时间过期

问题描述

这个答案似乎很全面,但我的应用程序正在使用ApplicationSignInManager而不是AuthenticationManager答案使用的,所以它并不真正适用于我的应用程序。

我正在尝试跟踪我的用户登录(这是客户内部使用的专有网站)。所以客户基本上希望登录像考勤卡一样工作,这样老板就可以看到员工何时进入办公室。

此功能意味着我不能依赖每个 ASP.NET Identity 默认行为的持久登录,因为它不允许我控制登录 cookie 是否/何时过期。

我想做的是每天凌晨 4 点使 cookie 过期,无论何时登录。

出于这个原因,在配置中限制 cookie 的生命周期也不能真正满足我的要求。

这是我的登录代码 - 几乎是标准的东西。根据第一个答案,我希望我可以将 cookie 的到期嵌入到SignIn方法中,但由于我没有使用AuthenticationManagerfor 登录,因此似乎没有办法用我当前的代码来做到这一点。

var manager = Context.GetOwinContext().GetUserManager<UserManager>();
var signinManager = Context.GetOwinContext().GetUserManager<ApplicationSignInManager>();

// Note that this always persists the login cookie.
var result = signinManager.PasswordSignIn(Email.Text, Password.Text, true, shouldLockout: false);

// Evaluation of result below

如果我需要改变我在这里登录的方式,那很好;我只需要一些关于要进行哪些更改的指导(示例代码会有所帮助)。

提前致谢!

标签: c#asp.netcookiesasp.net-identity-2

解决方案


由于没有人愿意为我的问题做出贡献,我四处尝试了一堆东西并得出了我自己的答案:

似乎按照我的问题中的链接限制 cookie 在配置中的寿命实际上是要走的路。

now在 auth config 方法中,我确定和之间有多少小时4am tomorrow,然后我将 cookie 设置ExpireTimeSpan为那个。

public void ConfigureAuth(IAppBuilder app)
{
    var expiryDate = DateTime.Now.Date.AddDays(1).AddHours(4);
    var ts = expiryDate - DateTime.Now;
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        ExpireTimeSpan = TimeSpan.FromHours(ts.Hours),
        LoginPath = new PathString("/Account/Login"),
        Provider = new CookieAuthenticationProvider
        {
            OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<UserManager, ApplicationUser>(
                validateInterval: TimeSpan.FromMinutes(30),
                regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
        }
    });
}

推荐阅读