【问题标题】:Can ASP.NET session remember objects?ASP.NET 会话可以记住对象吗?
【发布时间】:2012-07-27 23:09:37
【问题描述】:

我从一个例子开始我的问题。我认为它会更简单。

我想要做的是从我的 Android 设备发送 REQUEST_1 到等待 JSON 请求的 asp 页面,例如 {"Year":2012}。页面获取此 json 字符串,并将其保存到对象(示例 arraylist)。 一分钟后,我将 REQUEST_2 发送到同一个 ASP 页面,其中包含数据:{"Command","WhatIsCurrentYear"},然后我想得到响应:{"Year",2012}(仍应存储在数组列表中) .

有机会这样做吗?

【问题讨论】:

  • 这听起来很像 ASP.NET 会话变量的定义
  • 抱歉,问的有点不对。我已经改变了一点:)我希望记住会话中的对象:)
  • @Augis:重点仍然存在。 Session 对象的全部意义在于它在整个 Session 中持续存在...
  • @DanPichelman:这听起来像是一个答案,而不是评论。 ;-)

标签: asp.net session session-variables


【解决方案1】:

Session 有一个属性 Session.TimeOut。会话在时间到期后到期。默认情况下,在 asp.net 会话超时时间为 20 分钟此外,如果用户关闭浏览器会话,如果它的模式是 InProc(Cookies 或不带 cookie)也会过期。在 InProc 会话提供程序中,IIS 可以随时回收应用程序池(不活动期间,达到某些 CPU/内存阈值,...)而不会发出警告,使该会话的内容无效。 每次回发时都会初始化变量,因此如果之前您将数据保存在数组列表对象中,它就会丢失。要在回发期间保存数据,您可以使用 ViewState。

【讨论】:

  • 另外别忘了提一下,如果你使用 InProc session provider(将 session 数据存储在内存中,这是默认的 provider),IIS 可以随时回收应用程序池(周期为不活动,达到某些 CPU/内存阈值,...) 没有警告使该会话的内容无效。
【解决方案2】:

我创建了一个用于访问会话的类

public static IPerson User
{
    get
    {
        if (HttpContext.Current.Session == null || HttpContext.Current.Session[UserConstant] == null)
            return new Student();
        return (IPerson)HttpContext.Current.Session[UserConstant];
    }
    set
    {
        HttpContext.Current.Session[UserConstant] = value;
    }
}

你可以用你想要的任何对象替换 IPerson。

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2013-02-20
    • 2016-07-17
    相关资源
    最近更新 更多