Session丢失浅析
Session在很多情况下会丢失,主要有如下几种情况:
1.目录删除,以及重命名操作
2.Frame中关于Session丢失
分析Session丢失原因,主要是因为站点目录文件更新导致应用程序重启,并且重新分配内存,所以保存在内存中的session自然会丢失。
实际上在。net中,session主要有一些几种存储方式:
<sessionState mode="InProc"></sessionState>//保存在内存中
<sessionState mode="SQLServer"></sessionState>//保存在数据库中
<sessionState mode="StateServer"></sessionState>//保存在进程中(ASP.NET 状态服务)
很明显,要解决Session丢失的问题,我们可以选择将其保存到数据库或状态服务中。
测试代码:
C# 代码
public partial class _Default : System.Web.UI.Page
...{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack) ...{
Session["A"] = "a";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
try
...{
Label1.Text = Session["A"].ToString();
}
catch ...{
Label1.Text = "session已丢失";
Session["A"] = "a";
}
}
}
...{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack) ...{
Session["A"] = "a";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
try
...{
Label1.Text = Session["A"].ToString();
}
catch ...{
Label1.Text = "session已丢失";
Session["A"] = "a";
}
}
}
操作:删除目录,更改Global.asax文件,重启IIS等等,发现使用InProc模式Session丢失,而使用StateServer模式Session不会丢失。