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
        }
    }
}

ASP.. NET会话密钥在回发后过期

存储在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,您可以在其中维护这类会话的值。尝试使用这些文件,因为它的作用域直到页面的主会话过期。这样你就可以随时查看会话