现在我正在一个已经存在的ASP.NET MVC项目上工作,该项目存在会话有时突然结束并且用户被重定向到登录页面的问题。今天我注意到了一点,登录页面总是在后台加载:
我对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>
答案 0 :(得分:1)
如果登录页面作为起始页面,则会出现此问题。您可以通过修改过滤器文件(特别是在route.MapRoute中)来更改此设置。
有关更多信息,您可以查看here
如果要通过IIS更改重定向,则不能这样做。
答案 1 :(得分:0)
我的问题的答案是将会话状态的处理方式从“进程内”更改为“进程外”。