会话可以在C#中的页面处理期间到期吗?

CSC*_*CSC 8 .net c# asp.net

我试图解决会话ID似乎在回发期间神秘清除的问题.我确信正在设置该值,并且我的代码中没有其他地方可以清除该会话.另外,我在会话页面的viewstate中存储会话ID的值.在回发期间,viewstate为空,这实质上意味着当将值分配给viewstate时,会话变量为null.是否有可能在代码执行期间,会话对象因超时而被清除?

所以,如果我有以下代码,请说.

if (session["id"] == null)                                        :line1
{                                                                 :line2
   session["id"] = // Generate some unique id                     :line3 
}                                                                 :line4

viewstate["id"] = session["id"];                                  :line5
Run Code Online (Sandbox Code Playgroud)

从理论上讲,即使session ["id"]在line1中不为null,由于超时,它在line5上为null.

Zep*_*eph 3

我不得不说不。我刚刚创建了一个网站并将会话超时设置为 1(分钟)

<system.web>
    <compilation debug="true" targetFramework="4.0" />
  <sessionState timeout="1"></sessionState>
</system.web>
Run Code Online (Sandbox Code Playgroud)

然后在页面加载中添加一个带有此的网页

    protected void Page_Load(object sender, EventArgs e)
    {
        Session["Test"] = "Tester";

        //Should be longer than the 1 minute session timeout
        Thread.Sleep(120001);

        Response.Write(String.Format("Session[\"Test\"] = {0}", Session["Test"]));
    }
Run Code Online (Sandbox Code Playgroud)

我在 Cassini VS 调试器和 IIS 7 asp.net 4 上进行了测试,并且在每个测试中,页面都使用 Session["Test"] = Tester 加载。我还尝试在睡眠期间手动回收应用程序池并得到相同的结果。