Jon*_*han 24 asp.net asp.net-mvc asp.net-mvc-4
我有一个ASP.NET MVC4应用程序,我正在实现sessionTimeout,如:
<configuration>
<system.web>
<sessionState timeout="2"></sessionState>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在身份验证中:
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="1" />
</authentication>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
会话到期后(2分钟),我需要重定向到登录页面,但不会发生重定向.
如何更改代码以便重定向?
use*_*544 29
一种方法是,在Session Expire的情况下,在每个操作中,您必须检查其会话,如果它是null,则重定向到Login页面.
但这是一个非常忙碌的方法
为了解决这个问题,你需要创建自己的方法ActionFilterAttribute,你需要在每个动作方法中添加这个属性.
这是覆盖ActionFilterAttribute的类.
public class SessionExpireFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
// check if session is supported
CurrentCustomer objCurrentCustomer = new CurrentCustomer();
objCurrentCustomer = ((CurrentCustomer)SessionStore.GetSessionValue(SessionStore.Customer));
if (objCurrentCustomer == null)
{
// check if a new session id was generated
filterContext.Result = new RedirectResult("~/Users/Login");
return;
}
base.OnActionExecuting(filterContext);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在操作中添加此属性,如下所示:
[SessionExpire]
public ActionResult Index()
{
return Index();
}
Run Code Online (Sandbox Code Playgroud)
这将是你的工作.
Avt*_*ili 23
我发现在MVC中会话结束时重定向登录页面的非常简单的方法.我已经测试了它,这没有问题.
简而言之,我在1分钟之前的_Layout中捕获会话结束并进行重定向.
我试着一步一步解释一切.
如果我们想在30分钟后结束会话并重定向到loginPage,请看以下步骤:
像这样更改Web配置(设置31分钟):
<system.web>
<sessionState timeout="31"></sessionState>
</system.web>
Run Code Online (Sandbox Code Playgroud)添加此JavaScript _Layout(当此代码重定向前1分钟会话结束时,它会在用户上次操作后计算时间,而不是首次访问网站)
<script>
//session end
var sessionTimeoutWarning = @Session.Timeout- 1;
var sTimeout = parseInt(sessionTimeoutWarning) * 60 * 1000;
setTimeout('SessionEnd()', sTimeout);
function SessionEnd() {
window.location = "/Account/LogOff";
}
</script>
Run Code Online (Sandbox Code Playgroud)这是我的LogOff Action,它只生成LogOff并重定向LoginIn Page
public ActionResult LogOff()
{
Session["User"] = null; //it's my session variable
Session.Clear();
Session.Abandon();
FormsAuthentication.SignOut(); //you write this when you use FormsAuthentication
return RedirectToAction("Login", "Account");
}
Run Code Online (Sandbox Code Playgroud)我希望这对你来说是一个非常有用的代码.
有一个通用的解决方案:
假设您有一个名为Admin的控制器,您可以为授权用户放置内容.
然后,您可以覆盖管理控制器Initialize或OnAuthorization方法,并在会话超时时将重定向写入登录页面逻辑,如下所述:
protected override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
{
//lets say you set session value to a positive integer
AdminLoginType = Convert.ToInt32(filterContext.HttpContext.Session["AdminLoginType"]);
if (AdminLoginType == 0)
{
filterContext.HttpContext.Response.Redirect("~/login");
}
base.OnAuthorization(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95754 次 |
| 最近记录: |