我是ASP.NET会话的新手,并注意到在PostBack之后存储在Session中的会话密钥/变量即将到期。
在下面的代码中,在第一页加载期间,我将一些XML保存到Session键。然后,如果用户单击网页上的单选按钮,则会导致PostBack。在PostBack之后,我使用XML数据存储的Session变量现在为NULL。
我认为它可能与Session.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
}
}
}
答案 0 :(得分:1)
存储在 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();
}
仅供参考:如果您只想在回发期间生存数据,则可能需要考虑使用 查看状态 。
答案 1 :(得分:0)
asp.net提供文件名global.asax,您可以在其中维护此类会话的值。尝试使用这些文件,因为它的范围直到页面的主会话到期。您可以按时保持会议时间