Setting session duration in ASP.NET MVC application doesn#39;t work in web.config(在ASP.NET MVC应用程序中设置会话持续时间在web.config中不起作用)
问题描述
定义问题
我发现有两种方法可以在ASP.NET MVC应用程序中设置会话持续时间:
- 正在为
web.config
文件的<sessionState>
字段中的timeout
属性设置值。 - 在
Global.asax.cs
文件的Session_Start()
方法中设置Session.Timeout
属性。
当web.config
文件按the document实现时,第一种方法不起作用,我得到HTTP 404
错误:
<configuration>
<system.web>
<sessionState mode="InProc" cookieless="true" timeout="60" />
</system.web>
</configuration>
但是,第二种方法在Global.asax.cs
文件中实现时的工作方式如下:
public class ApplicationName : System.Web.HttpApplication
{
protected void Session_Start(object sender, EventArgs e)
{
/* Sets the session duration to 60 minutes. */
Session.Timeout = 60;
}
}
错误代码通知
当我使用第一种方法时,在/Login/Index
页面上单击";登录&按钮时出现HTTP 404
错误。因为虽然输入了正确的用户名和密码,但页面会被重定向到/{token}/Login/LoginControl
页面,而页面应该被重定向到/Profile
页面。我不知道这种行为是如何发生的。
相关源代码
LoginController.cs
文件中的相关方法和Login/Index.cshtml
文件中定义的脚本如下:
public class LoginController : PublicController
{
private readonly IUserService _userService;
private readonly IUnitOfWork _uow;
private SessionContext _sessionContext;
public LoginController(IUnitOfWork uow, IUserService userService) : base(uow)
{
_uow = uow;
_userService = userService;
_sessionContext = new SessionContext();
}
[HttpPost]
public ActionResult LoginControl(ELoginDTO login)
{
var result = _userService.GetUserByUserName(login.UserName, login.Password);
if (result != null)
{
AutoMapper.Mapper.DynamicMap(result, _sessionContext);
Session["SessionContext"] = _sessionContext;
return Json("/Profile", JsonRequestBehavior.AllowGet);
}
else
{
return Json("", JsonRequestBehavior.AllowGet);
}
}
}
单击登录按钮将触发FUNCTION_LoginControl()
脚本:
function FUNCTION_LoginControl()
{
var model = { UserName: $("#inputUserName").val(), Password: $("#inputPassword").val() };
if (model.UserName.trim() != "" && model.Password.trim() != "")
{
$.ajax({
url: "/Login/LoginControl",
type: "POST",
data: model,
success: function (e) {
if (e != "")
{
window.location = e;
}
}
});
}
}
推荐答案
我发现,当框架的<sessionState>
字段中的cookieless
属性设置为True时,会向URL添加一个唯一的ID。因此,我意识到,当我单击&登录&按钮时,我收到了一个错误,因为帖子转到了/{unique-id}/Login/LoginController
,而它本应该转到/Login/LoginController
。
解决此问题的方法是将Web.config文件中sessionState
中的cookieless
字段设置为false
:
<!-- HttpPost request if "false" is added to the "cookieless" attribute -->
<!-- HttpPost Request: "/Login/LoginController" -->
<sessionState mode="InProc" cookieless="false" timeout="60" />
<!-- HttpPost request if "true" is added to the "cookieless" attribute -->
<!-- HttpPost Request: "/{unique-id}/Login/LoginController" -->
<sessionState mode="InProc" cookieless="true" timeout="60" />
这篇关于在ASP.NET MVC应用程序中设置会话持续时间在web.config中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在ASP.NET MVC应用程序中设置会话持续时间在web.config中不起作用
基础教程推荐
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 将 XML 转换为通用列表 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01