ASP.. NET会话密钥在回发后过期
本文关键字:过期 NET 会话密钥 ASP | 更新日期: 2023-09-27 18:14:16
我是ASP新手。. NET会话,并且我注意到存储在会话中的会话键/变量在PostBack后过期。
在下面的代码中,在第一个页面加载期间,我将一些XML保存到Session密钥中。然后,如果用户单击网页上的单选按钮,则会导致PostBack。在PostBack之后,我与XML数据一起存储的Session变量现在为NULL。
我想这可能和会议有关。Timeout = 60,但我注意到,即使用户在第一个页面加载的前10秒内单击单选按钮,Session变量仍然是NULL。
在下面的doStuff()中,xmlDoc为NULL。
public partial class InstallmentBillingPortal : System.Web.Ui.Page
{
XmlDocument xmlDoc
{
get
{
return Session["xmlDocKey_3069"] == null ? null : (XmlDocument)Session["xmlDocKey_3069"];
}
set
{
Session["xmlDocKey_3069"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
Session.Timeout = 60;
if (!this.IsPostBack)
{
var xml = File.ReadALlText(Server.MapPath(@"request.xml"));
xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
}
else
{
doStuff();
}
}
void doStuff()
{
if (xmlDoc != null)
{
// do something
}
}
}
存储在SessionState中的数据直到用户关闭浏览器或会话超时才可用。因此,您希望检查xmlDoc == null
而不是IsPostBack
。
不要在页面内设置SessionState超时时间。相反,您希望在web.config中设置它。例如:60分钟-
<configuration>
<system.web>
<sessionState timeout="60"></sessionState>
</system.web>
</configuration>
XmlDocument xmlDoc
{
get { return (XmlDocument) Session["xmlDocKey_3069"]; }
set { Session["xmlDocKey_3069"] = value; }
}
protected void Page_Load(object sender, EventArgs e)
{
if (xmlDoc == null)
{
var xml = File.ReadAllText(Server.MapPath(@"request.xml"));
xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
}
doStuff();
}
仅供参考:如果您只想在回发期间保存数据,您可能需要考虑使用 viewstate 。
asp.net提供全局文件名。Asax,您可以在其中维护这类会话的值。尝试使用这些文件,因为它的作用域直到页面的主会话过期。这样你就可以随时查看会话