Asp.net 如何让用户登录2周?

Asp.net 如何让用户登录2周?,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,嗨 我正在使用asp.net mvc和asp.net成员资格 我想有一个复选框,如果单击,用户将保持登录2周(除非他们清除cookie) 所以我知道他们是 FormsAuthentication.SetAuthCookie(用户名,createPersistentCookie) 但我不知道如何设置为2周的保留期 我重写了大部分会员资料。因此,我不使用Create()和VerifyUser()之类的东西。将哈希键或随机字符串添加到cookie和数据库(都是相同的键)。如果cookie和数据库值相同

我正在使用asp.net mvc和asp.net成员资格

我想有一个复选框,如果单击,用户将保持登录2周(除非他们清除cookie)

所以我知道他们是

FormsAuthentication.SetAuthCookie(用户名,createPersistentCookie)

但我不知道如何设置为2周的保留期


我重写了大部分会员资料。因此,我不使用Create()和VerifyUser()之类的东西。

将哈希键或随机字符串添加到cookie和数据库(都是相同的键)。如果cookie和数据库值相同,则当用户启动新会话时,请再次登录。当用户到达两周后,使用cronjob(Unix)或计划任务(Windows)从数据库中删除密钥

警告:不要依赖cookie的过期日期,因为人们可能会入侵他们的浏览器。

规则:永远不要相信你的任何用户

只需使用一个有效期为2周的简单饼干。

你看到了吗


与科宁的建议类似。

您可以在web.config中设置全局会话超时(值以分钟为单位)

<system.web>
    <authentication mode="Forms">
          <forms timeout="20160"/>
    </authentication>
</system.web>

您不能使用会话方法保持用户登录,因为浏览器关闭时会删除会话cookie

执行user142019提供的操作,并将会话的IdleTimeout参数设置得非常短,最长为15分钟。当服务器收到来自浏览器的任何请求时,首先检查会话是否处于活动状态。如果没有,试着得到饼干。如果cookie和数据库值相同且未过期,请将其分配给(新)会话并返回响应

当用户离开您的站点时,您可以使用onBeforeUnload侦听器发送注销请求。如果已注销,请删除cookie和db记录,如果未注销,请为下次自动登录分配一个新哈希值,并在用户重新调谐到您的网站时再次刷新该哈希值。您还可以跟踪IP和浏览器,并将它们链接到数据库中的哈希。
因此,如果cookie与另一个浏览器或IP一起使用,并且哈希代码有效,您可以强制他们再次登录。

但是如果他们不选中该复选框,该怎么办?不是每个人都能得到那种设置吗?是的,对不起,我误读了你的问题-我会更新我的回答以解决你的具体问题…我想如果我只是像你在web.config中那样设置东西,但禁用滑动过期,那么我就会得到我想要的。你是否考虑过将答案标记为接受答案?到目前为止,这是最简单的方法,但也是最容易破解的方法。次要的一点,但这不是一个问题“会话”cookie,如果它设置了过期日期。它是“永久的”“cookie!”w3d同意了。更正请您解释一下随机字符串的散列是如何提高解决方案的安全性的?如果随机字符串的散列同时存储在数据库和cookie中,这与将随机字符串同时存储在数据库和cookie中基本上不一样吗?我同义地使用散列键和随机字符串。
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; 
    }

}