Asp.net 如果出现“登录”,我如何记录任何登录操作;“记住我”;选项

Asp.net 如果出现“登录”,我如何记录任何登录操作;“记住我”;选项,asp.net,c#-3.0,login,forms-authentication,remember-me,Asp.net,C# 3.0,Login,Forms Authentication,Remember Me,我有一个asp.net登录web表单,它有(用户名文本框-密码文本框)和“记住我”复选框选项 当用户登录时,我执行以下代码 if (provider.ValidateUser(username, password)) { int timeOut = 0x13; DateTime expireDate = DateTime.Now.AddMinutes(19.0); if (rememberMeCheckBox.Checked) { timeOut

我有一个asp.net登录web表单,它有(用户名文本框-密码文本框)和“记住我”复选框选项 当用户登录时,我执行以下代码

if (provider.ValidateUser(username, password))
{
    int timeOut = 0x13;
    DateTime expireDate = DateTime.Now.AddMinutes(19.0);
    if (rememberMeCheckBox.Checked)
    {
        timeOut = 0x80520;
        expireDate = DateTime.Now.AddYears(1);
    }

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(username, true, timeOut);
    string cookieValue = FormsAuthentication.Encrypt(ticket);
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieValue);
    cookie.Expires = expireDate;
    HttpContext.Current.Response.Cookies.Add(cookie);

    AddForLogin(username);
    Response.Redirect("...");
}
在用户通过身份验证后的代码中,我记录他通过调用方法
AddForLogin(用户名)登录数据库
但若用户选择在登录时记住我,然后他尝试在该登录方法未执行时访问该站点,因为它使用cookies。。。所以我有很多问题:

1-这是记录登录操作的最佳方式还是其他更好的方式?

2-在我的例子中,如果用户选择了记住我,如何记录登录操作?

实现登录操作的最佳方法是实现您的登录设计。在您的代码中,您似乎使用了内置功能以及记录自定义信息

为了记录登录信息,您可以自定义您的提供程序。确实会有一些数据库更改,但您可以通过存储过程处理这些更改,而不必更改整个代码。例如,创建一个新表,其中包含您希望包含的包括登录操作在内的任何信息(我的意思是用户是如何登录的,是第一次登录还是用户已经选择了“记住我”选项,以便用户通过cookie登录)

致以最诚挚的问候

Myra

目前,您没有足够的信息来区分这两种情况。我认为最简单的方法是在用户登录时添加临时cookie,然后在您的页面类中添加临时cookie,如果临时cookie不存在,则他们正在使用“记住我”选项。然后您可以记录并设置临时cookie。

什么最后,我在一个应用程序中完成了一个测试,该应用程序在
Session\u Start()
中测试了他们是否登录,并在那里进行了日志记录。我发现这确实捕获了登录成功的人,因为他们的登录cookie仍然有效(因此他们不需要显式登录)


您必须测试这对常规登录的影响,以确保您不会登录两次,但这很简单。我的应用程序实际上排除了上次登录在5分钟内时的登录,但这只是为了限制有多少记录。

如果我了解您希望实现的目标,也许我会n您的应用程序类(global.asax.cs)将是登录的正确位置?

在阅读了所有其他答案后,这里是我的看法

以下是我考虑到性能的想法:

  • 创建登录日志记录间隔设置,例如12小时或24小时(由您选择)。您可以将此设置存储在web.config appSettings中。该值越小,性能影响越大

  • 当用户在登录页面手动成功登录时,将其记录到数据存储中,并使用当前日期时间(Lastloggedlogin datetime)设置cookie

  • 每当用户发出页面请求时,请比较cookie中存储的上次记录的登录日期时间与当前请求日期时间之间的差异。如果差异小于设置中指定的间隔,请不要记录。如果差异较大,请将cookie值刷新为当前日期时间,并将登录记录到数据存储中。这一步是为了减少性能损失


  • 我希望我有一个好的解决方案会话不能用于此,它们可能会触发错误警报(例如:用户登录,导航离开,但不关闭浏览器。返回,新会话:警报!但这是一个错误警报,成功登录不是由于“记住我”功能)如果他们在会话超时内返回,则不会。在这种情况下,额外的登录日志可能比完全丢失的日志要好得多。我提供的+1、简单的解决方案和可靠的(只要用户不删除特定的cookie)可能不会触发对应用程序的每次调用