PostBack

时间:2016-10-22 18:53:40

标签: c# asp.net session

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

2 个答案:

答案 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,您可以在其中维护此类会话的值。尝试使用这些文件,因为它的范围直到页面的主会话到期。您可以按时保持会议时间