【问题标题】:Why does session expires when submit a form in Asp.Net MVC?为什么在 Asp.Net MVC 中提交表单时会话会过期?
【发布时间】:2019-01-04 13:53:03
【问题描述】:

当我尝试提交特定表单时,会话过期。

不要将此问题与会话超时联系起来。我已经用其他表单进行了测试,一切正常,但是当我尝试提交特定表单时,会话会过期。

这是我用来确保会话不会过期的[SessionExpire] 属性。

public class SessionExpireAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpContext ctx = HttpContext.Current;

        // check  sessions here
        if (HttpContext.Current.Session["createdby"] == null)
        {
            filterContext.Result = new RedirectResult("~/Account/Login");
            return;
        }

        base.OnActionExecuting(filterContext);
    }
}

这是我的控制器操作

[SessionExpire]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "FirmId,Name,Email,Phone,Status,CellPhone,UnitLimit,Address,PaymentDate,NextPaymentDate,Currency,NoUnit,NoProperty,ExpectedNoUnit,BusinessType,Website,ClientId,CreatedDate,CreatedBy,DeletedBy,DeletedOn,PackageId,IsCustomPackage")] FirmDM objFirm, HttpPostedFileBase fileLogo, HttpPostedFileBase fileSign)
{
     //My logic
}

这是我的表格

@using (Html.BeginForm("Edit", "Firm", FormMethod.Post, new { enctype = "multipart/form-data", @class = "form-horizontal", role = "form" }))
{
     @Html.AntiForgeryToken()
     //My input fields
     <input type="submit" class="btn btn-default" value="Save" />
}

我在 Stack Overflow 上发现了很多关于会话到期的问题,例如 this,但无法解决问题。我很好奇,为什么我的会话值在提交特定表单时变为空?

如果需要任何其他信息,请询问。

【问题讨论】:

  • 从哪里设置Session["createdby"]??
  • @Umair Anwaar 当用户成功登录时,我正在帐户控制器的登录操作中设置我的Session 值。
  • 当您设置会话值时,还要检查到期Session.Timeout 并重定向到您的表单获取操作并再次检查Session.Timeout

标签: c# asp.net-mvc


【解决方案1】:

这似乎与您的 IIS(或 IIS express)应用程序的应用程序池空闲时间有关……请参阅link

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 2012-02-17
    • 2015-01-14
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2010-09-28
    相关资源
    最近更新 更多