【问题标题】:Session timeout - how to make "remember me" properly?会话超时 - 如何正确“记住我”?
【发布时间】:2018-03-16 03:15:23
【问题描述】:

代码(在 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;
}

基本上,我想使用会话和 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 没有改变。它被第一个超时设置卡住了。请帮我做,每次我注销和登录时,会话超时都会改变。

【问题讨论】:

  • stackoverflow.com/questions/3140341/… 这是一个重复的问题
  • 亚伦。 S,您仅使用 cookie 向我发送了一个问题。我的问题是关于会话的。
  • 该 cookie 存储在哪里?在会话中,对吗?

标签: c# asp.net session cookies


【解决方案1】:

好吧,我做所有这些事情真是太愚蠢了,因为我根本不需要添加任何 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);
}

我只是不知道我能做到这一点,因为我记得上次我尝试过它时它对我不起作用。奇怪的是,没有使用这样的会话的示例和教程。我没有在互联网上找到任何可以显示使用带有“记住我”选项的会话的示例的任何形式。我不知道为什么没人回答我的问题,就这么简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2015-01-22
    相关资源
    最近更新 更多