2013-11-10 20 views
1

我有一个配置了ASP.NET身份并使用本地帐户选项的项目。我修改了上下文来收集额外的数据,一切都很好。一个这样的字段用于存储在Login的Post ActionResult中设置的用户LastLoginDate。持久cookie登录过程中调用什么处理程序/方法?

问题是,在用户选择了“记住我”选项后,没有任何通常的处理程序或方法正在被击中。我已经通过尝试找到它们并且不能这样做,所以我认为有一种方法需要重写。任何帮助,这将不胜感激。

谢谢!

回答

4

当您使用本地帐户时,OWIN将在用户登录时创建一个名为.AspNet.ApplicationCookie的cookie。 此cookie将存储在浏览器中。 如果用户选择“记住我”选项,则Cookie将在浏览器会话结束时设置为失效,或者默认为登录后的14天。 如果cookie存在于浏览器中并且没有过期,那么用户登录并且不必登录。我想这就是你所看到的,即用户根本不登录,因为默认是14天,并滑动到期,这意味着选择“记住我”并每14天至少使用一次网站的用户将保持登录状态。

您可以通过向CookieAuthenicationOptions添加选项来更改默认值在Startup.Auth.cs中初始化。即将cookie的到期时间设置为一周,而不是使用滑动到期时间,您应该这样做:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
     AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
     LoginPath = new PathString("/Account/Login"), 
     ExpireTimeSpan = new TimeSpan(7, 0, 0, 0), 
     SlidingExpiration = false 
}); 
+0

谢谢您的回复,非常有帮助。所以,虽然他们有cookie,但他们访问时没有调用服务器端方法,对吗?所以正因为如此,没有办法知道用户何时或者多长时间访问该网站。它是否正确?谢谢。 – Mike

+0

你可以选择不允许“记住我”选项。然后,用户每次重新启动浏览器时都必须登录。常规操作方法当然总是被调用,您可以在这里进行检查。如果您不想删除“记住我”选项,则可以检查所有操作方法以查看谁在调用您的方法。例如。你可以重写OnActionExecuting并检查用户是否被认证,然后是谁。 –

+0

太棒了!非常感谢,这就是我一直在寻找的。 – Mike