ASP.NET SqlServer会话状态

时间:2011-01-30 13:24:50

标签: asp.net sql-server

我已经配置了一个asp.NET Web应用程序来使用表单身份验证并将会话存储在自定义表中。到目前为止一切顺利,当我登录身份验证时,浏览器会话仍然存在。我试图抓住存储会话的可能性,但我很早就遇到了问题。

如果我将变量/值对添加到会话对象,并将会话变量输出到页面,则变量/值对将按预期显示,但是当我关闭并重新打开浏览器时,正确的会话将按预期重新加载(我通过输出sessionid来确认,但变量/值对已经消失。

我是否有一些非常简单的东西,因为据我所知,会话变量也应该可以在浏览器会话中使用(字符串是可序列化的吗?)。

List<SessionVar> sessionVars = new List<SessionVar>();
protected void Page_Load(object sender, EventArgs e)
{
    Session[Session.SessionID] = Session.SessionID;
    LoadSessionData();
}

protected void btnSessionVariable_Click(object sender, EventArgs e)
{
    Session[txtVariableName.Text.Trim()] = txtVariableValue.Text.Trim();
    txtVariableName.Text = string.Empty;
    txtVariableValue.Text = string.Empty;
    LoadSessionData();
}

private void LoadSessionData()
{
    sessionVars.Clear();
    foreach (string key in Session.Keys)
    {
        sessionVars.Add(new SessionVar(key, (string)Session[key]));
    }
    gridView.DataSource = sessionVars;
    gridView.DataBind();
}

1 个答案:

答案 0 :(得分:1)

当浏览器(或浏览器选项卡)关闭并重新启动时,不会维护会话状态。 会话cookie不再适用于新的浏览器窗口,因此将启动新会话。 ASP.NET再次分配相同的ID只是一个coincedence。