Asp.net 如果出现“登录”,我如何记录任何登录操作;“记住我”;选项
我有一个asp.net登录web表单,它有(用户名文本框-密码文本框)和“记住我”复选框选项 当用户登录时,我执行以下代码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
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)可能不会触发对应用程序的每次调用