我已经配置了一个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();
}
答案 0 :(得分:1)
当浏览器(或浏览器选项卡)关闭并重新启动时,不会维护会话状态。 会话cookie不再适用于新的浏览器窗口,因此将启动新会话。 ASP.NET再次分配相同的ID只是一个coincedence。