c# - 在 C# 页面处理期间, session 可以过期吗

标签 c# asp.net .net

我正在尝试解决 session ID 似乎在回发期间神秘清除的问题。我确信正在设置该值,并且我的代码中没有其他地方可以清除该 session 。此外,我将 session ID 的值存储在页面的 View 状态中。在回发期间,viewstate 为空,这实际上意味着当将值分配给 viewstate 时, session 变量为 null。有没有可能在代码执行过程中,session对象因为超时被清除了?

假设我有以下代码。

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

viewstate["id"] = session["id"];                                  :line5

理论上是否可能,即使 session["id"] 在第 1 行中不为空,但由于超时而在第 5 行中为空。

最佳答案

我不得不说不。我刚刚做了一个站点,并将 session 超时设置为 1(分钟)

<system.web>
    <compilation debug="true" targetFramework="4.0" />
  <sessionState timeout="1"></sessionState>
</system.web>

然后在页面加载中添加一个网页

    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"]));
    }

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

关于c# - 在 C# 页面处理期间, session 可以过期吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11971546/

相关文章:

.net - 在 .Net 中替代手动构建表/TR/TD?

c# - 返回与该项目相关的所有记录都具有特定条件的项目

c# - Comparer<T>.Default 属性

c# - 使用单个查询仅选择不匹配项(仅限连接)

asp.net - 网络API : No MediaTypeFormatter is available to read an object of type 'IEnumerable` 1' from content with media type ' text/plain'

javascript - 如何用 JavaScript 重新加载 div?

c# - IsDirty 对 EF 实体使用 INotifyPropertyChanged

javascript - 是否有更好的 JavaScript 代码来验证字符串作为日期时间?

c# - 如何从 .Net 中的内存映射 I/O 端口读取?

c# - 发布版本 : "Common Language Runtime detected an invalid program." 上的 nunit