【发布时间】: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