ASP NET MVC 5:会话突然结束

时间:2018-06-19 15:40:41

标签: c# asp.net asp.net-mvc

现在我正在一个已经存在的ASP.NET MVC项目上工作,该项目存在会话有时突然结束并且用户被重定向到登录页面的问题。今天我注意到了一点,登录页面总是在后台加载:

enter image description here

我对ASP.NET MVC没有太多经验,所以我想问一问,这总是被加载的原因是什么。该代码未记录,所以我找不到原因。我使用IIS 8进行部署。

更新

我现在已经在Fiddler上进行了跟踪,我看到了一些东西,起初我以为会话cookie被丢弃或替换了却没有。即使在登录页面上也可以找到它。

更新2:

我现在已经验证了cookie仍然存在,并且在强制注销之后仍保留了登录信息。 ASP NET中是否存在一个常见问题,可能导致会话仍被保存但不再被识别?原来可能是这个ActionFilter:

namespace backend.Models.ActionFilter
{
    public class HasUserId : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext.HttpContext.Session.GetInt32("UserId") == null)
            {
                System.Diagnostics.Debug.WriteLine("Session is not there anymore");
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { action = "Login", controller = "Account" }));
            }
        }
    }
}

更新3:

我想我已经找到问题了,会话状态被存储为“正在处理”,我现在将其更改为“状态服务”。我希望这可以解决我的问题。即使“ ASP NET状态服务”被暂停,登录仍然可以正常工作吗?这是我的配置:

<system.web>
    <sessionState 
        mode="StateServer" 
        stateConnectionString="tcpip=127.0.0.1:42424" 
        stateNetworkTimeout="20" 
        timeout="240">
    </sessionState>
</system.web>

2 个答案:

答案 0 :(得分:1)

如果登录页面作为起始页面,则会出现此问题。您可以通过修改过滤器文件(特别是在route.MapRoute中)来更改此设置。

有关更多信息,您可以查看here

如果要通过IIS更改重定向,则不能这样做。

答案 1 :(得分:0)

我的问题的答案是将会话状态的处理方式从“进程内”更改为“进程外”。