HI
我正在使用带有asp.net会员资格的asp.net mvc。
我希望有一个复选框,如果点击则会让用户登录2周(除非他们清除了他们的Cookie)。
所以我知道他们是
FormsAuthentication.SetAuthCookie(userName,createPersistentCookie)
但我不知道如何将其设置为2周保留。
我重写了大部分会员资料。所以我不使用Create()和VerifyUser()等东西。
答案 0 :(得分:17)
向cookie和数据库添加散列键或随机字符串(两者都是相同的键)。如果cookie和数据库值相同,则当用户启动新会话时,请再次签名。当用户达到两周时,使用cronjob(Unix)或计划任务(Windows)从数据库中删除密钥。
警告:不要依赖Cookie过期日期,因为人们可以破解浏览器。
规则:永远,永远信任您的任何用户!
答案 1 :(得分:4)
您可以在web.config中设置全局会话超时(值以分钟为单位),例如
<system.web>
<authentication mode="Forms">
<forms timeout="20160"/>
</authentication>
</system.web>
这适用于所有经过身份验证的用户。如果您想使用“记住我”功能,那么您需要编写自己的代码来设置cookie /票证。这样的事情(采取from here):
protected void Page_Load()
{
if (Request.Cookies["username"] == null || Request.Cookies["username"].Value.ToString().Trim() == "")
{
Login1.RememberMeSet = true;
}
else
{
Login1.UserName = Request.Cookies["username"].Value.ToString().Trim();
Login1.RememberMeSet = true;
}
}
protected void RememberUserLogin()
{
// Check the remember option for login
if (Login1.RememberMeSet == true)
{
HttpCookie cookie = new HttpCookie("username");
cookie.Value = Login1.UserName.Trim();
cookie.Expires = DateTime.Now.AddHours(2);
HttpContext.Current.Response.AppendCookie(cookie);
Login1.RememberMeSet = true;
}
else if (Login1.RememberMeSet == false)
{
HttpContext.Current.Response.Cookies.Remove("username");
Response.Cookies["username"].Expires = DateTime.Now;
Login1.RememberMeSet = false;
}
}
答案 2 :(得分:2)
只需使用一个有效期为2周的简单Cookie。
答案 3 :(得分:1)
答案 4 :(得分:0)
您不能使用会话方法让您的用户保持登录状态,因为浏览器会在浏览器关闭时删除会话 cookie。
执行 user142019 提供的操作并将会话的 IdleTimeout 参数设置得非常短,最多 15 分钟。当服务器收到来自浏览器的任何请求时,首先检查会话是否处于活动状态。如果没有,请尝试获取 cookie。如果 cookie 和数据库值相同且未过期,则将其分配给(新)会话并返回响应。
您可以使用 onBeforeUnload 侦听器在用户离开您的站点时发送注销请求。如果注销,请删除 cookie 和 db 记录,如果没有 - 为下一次自动登录分配一个新的哈希值,并在用户重新调整到您的网站时再次刷新该哈希值。您还可以跟踪 IP 和浏览器并将它们链接到您的数据库中的哈希值。 因此,如果 cookie 被其他浏览器或 IP 使用,并且哈希码有效,您可以强制他们再次登录。