会话超时 - 如何正确地“记住我”?

时间:2017-10-04 16:25:27

标签: c# asp.net session cookies

代码(在global.asax中):

void Session_Start(object sender, EventArgs e)
{
    // remember me
    HttpCookie rememberCookie = HttpContext.Current.Request.Cookies["remember"];
    if (rememberCookie != null)
    {
        if (rememberCookie.Value == "true")
            HttpContext.Current.Session.Timeout = 464800;
        else
            HttpContext.Current.Session.Timeout = 70;
    }
    else
        HttpContext.Current.Session.Timeout = 60;
}

基本上,我想使用session和cookie来“记住我”。 这是在home.aspx.cs

中登录时的代码
public void _loginFrmSubmit(object sender, EventArgs e)
{
    Session["User"] = home_username.Text;
    HttpCookie rememberCookie;
    //rememberCookie.HttpOnly = true;
    if (remember.Checked)
    {
        rememberCookie = new HttpCookie("remember", "true");
        rememberCookie.Expires = DateTime.Now.AddMonths(12);
    }
    else
    {
        rememberCookie = new HttpCookie("remember", "false");
        rememberCookie.Expires = DateTime.Now.AddDays(1);
    }
    HttpContext.Current.Response.Cookies.Add(rememberCookie);
    Response.Redirect(Request.RawUrl);
}

首次触发时代码正常工作。但是在我退出后:

public void _Quit(object sender, EventArgs e)
{
    HttpCookie rememberCookie = new HttpCookie("remember");
    rememberCookie.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(rememberCookie);
    Session.Clear();
    Response.Redirect(Request.RawUrl);
}

我再次登录。 session.timeout没有改变。它会遇到第一个超时设置。每次我退出并登录时,请帮助我改变会话超时。

1 个答案:

答案 0 :(得分:0)

好吧,这对我来说非常愚蠢,因为我没有添加任何cookie并且完全没有使用会话启动。我所要做的就是在aspx.cs(登录提交)中设置会话超时。

public void _loginFrmSubmit(object sender, EventArgs e)
{
            Session["User"] = home_username.Text;
            if (remember.Checked)
                Session.Timeout = 464800;
            else
                Session.Timeout = 120;
            Response.Redirect(Request.RawUrl);
            Response.Redirect(Request.RawUrl);
}

我只是不知道我能做到这一点,因为在我记得我最后一次尝试时,它并没有为我工作。奇怪的是,没有使用这样的会话的示例和教程。我没有找到任何东西,互联网上的任何形式都会显示一个使用会话的例子,记住我'选项。我不知道为什么没有人回答我的问题,就这么简单。