【问题标题】:Session some of data losing MVC会话部分数据丢失 MVC
【发布时间】:2018-02-15 20:05:52
【问题描述】:

我们的主要项目 MVC 5。我一直使用 Session 对象没有问题。但在一个案例中,我遇到了一个问题。通常,我们使用 4 个主会话密钥。这很好用。在控制器级别过滤器分配的键。

最近我们开发了一些东西,应该是跨应用程序和特定于会话的共享数据。因此,我将值分配给会话,我可以看到并使用控制器的相同操作。但是有一个问题,比如我刷新页面或者点击某个东西触发了一个动作,我的session key不存在。

我们正在使用 InProc 和 Session timeout 60。此外,其他会话密钥没有问题。即使在刷新页面后也会出现问题。

这种用法有什么问题?

    /// Index of some controller
    public virtual ActionResult Index(string key)
{
    if(InquiryId == 1){
    var result = RequestClient("...");
    InquiryId = result.Id;
    }
...
}

在基本控制器中它的相关部分;

 public int InquiryId
        {
            get
            {
                if (Session["InquiryId"] != null)
                {
                    return (int)Session["InquiryId"];
                }
                return 1;
            }
            protected set
            {
                _inquiryId = value;
                HttpContext.Session.Add("InquiryId", value);
            }
        }

【问题讨论】:

  • 尝试使用TempData或ViewBag,ViewData代替Session
  • 感谢您的建议。但我不需要那个 id。我需要后端工作什么的。
  • 好的,但是你可以使用 TempData
  • 但是由于浏览器上的重定向和后退/前进功能等其他原因,tempdata 可以为空。我们已经尝试过,但一无所获。 Session 对象有奇怪的行为,我们正在尝试找出原因?
  • 您可以尝试在索引操作的第一行设置键吗? RequestClient 的结果正确吗?

标签: asp.net .net asp.net-mvc session


【解决方案1】:

尝试使用这个:

Session.Timeout = 60; // 60 is number of minutes

您也可以通过 web.config 中的以下键配置会话超时。

<system.web>
    <sessionState mode="InProc" timeout="30" />
</system.web>

【讨论】:

  • 正如我所提到的。已经这样做了。它也不能解释丢失一些数据和持久化一些数据。
猜你喜欢
  • 2012-10-18
  • 2014-12-05
  • 2018-01-27
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
相关资源
最近更新 更多