ASP.NET SqlServer会话状态
我已将asp.NET web应用程序配置为使用表单身份验证并将会话存储在自定义表中。到目前为止,很好,当我登录时,身份验证在浏览器会话中持续存在。我正试图抓住像这样存储会话的可能性,但我很早就遇到了一个问题 如果我向会话对象添加变量/值对,并将会话变量输出到页面,则变量/值对将按预期显示,但当我关闭并重新打开浏览器时,正确的会话将按预期重新加载(我通过输出sessionid确认),但变量/值对将消失 根据我的理解,会话变量也应该在浏览器会话中可用(字符串是可序列化的,对吗?)ASP.NET SqlServer会话状态,asp.net,sql-server,Asp.net,Sql Server,我已将asp.NET web应用程序配置为使用表单身份验证并将会话存储在自定义表中。到目前为止,很好,当我登录时,身份验证在浏览器会话中持续存在。我正试图抓住像这样存储会话的可能性,但我很早就遇到了一个问题 如果我向会话对象添加变量/值对,并将会话变量输出到页面,则变量/值对将按预期显示,但当我关闭并重新打开浏览器时,正确的会话将按预期重新加载(我通过输出sessionid确认),但变量/值对将消失 根据我的理解,会话变量也应该在浏览器会话中可用(字符串是可序列化的,对吗?) List sess
List sessionVars=new List();
受保护的无效页面加载(对象发送方、事件参数e)
{
Session[Session.SessionID]=Session.SessionID;
LoadSessionData();
}
受保护的无效btnSessionVariable\u单击(对象发送方,事件参数e)
{
会话[txtVariableName.Text.Trim()]=txtVariableValue.Text.Trim();
txtVariableName.Text=string.Empty;
txtVariableValue.Text=string.Empty;
LoadSessionData();
}
私有void LoadSessionData()
{
sessionVars.Clear();
foreach(Session.Keys中的字符串键)
{
Add(新SessionVar(key,(string)Session[key]);
}
gridView.DataSource=sessionVars;
gridView.DataBind();
}
浏览器(或浏览器选项卡)关闭并重新启动时,不会保持会话状态。
会话cookie不再适用于新浏览器窗口,因此将启动新会话。ASP.NET再次分配相同的id只是一个巧合
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();
}