Asp.net mvc ASP.NET MVC 3确定会话状态(新建或超时)
我目前使用ASP.NET MVC应用程序的默认表单身份验证方法 首先,我的所有需要身份验证的actionmethods都有这个属性Asp.net mvc ASP.NET MVC 3确定会话状态(新建或超时),asp.net-mvc,asp.net-mvc-3,session,forms-authentication,Asp.net Mvc,Asp.net Mvc 3,Session,Forms Authentication,我目前使用ASP.NET MVC应用程序的默认表单身份验证方法 首先,我的所有需要身份验证的actionmethods都有这个属性 [Authorize()] 当有人试图调用该操作方法“服务”的页面,但他们还没有登录时,它会将他们发送到登录页面…完美!然而,如果他们的会话超时并试图点击该页面,他们也会被重定向到登录页面,但没有说明原因。我希望能够确定这是新的访问,还是超时,并相应地在登录屏幕上显示不同的消息 这可能吗?在登录时,您可以设置绑定到浏览器会话的cookie。如果该cookie存在,
[Authorize()]
当有人试图调用该操作方法“服务”的页面,但他们还没有登录时,它会将他们发送到登录页面…完美!然而,如果他们的会话超时并试图点击该页面,他们也会被重定向到登录页面,但没有说明原因。我希望能够确定这是新的访问,还是超时,并相应地在登录屏幕上显示不同的消息
这可能吗?在登录时,您可以设置绑定到浏览器会话的cookie。如果该cookie存在,则您知道会话超时。如果没有,您就知道这是一次新的访问。请查看我创建的此自定义授权属性。它是为了实现一些自定义的基于角色的授权,但是您也可以让它为您工作。有一个Session.IsNewSession属性,您可以检查此请求是否发生在新会话上
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext.User.Identity.IsAuthenticated)
{
httpContext.User = new GenericPrincipal(httpContext.User.Identity, AdminUserViewModel.Current.SecurityGroups.Select(x => x.Name).ToArray());
}
return base.AuthorizeCore(httpContext);
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("/Authentication/NotAuthorized", false);
}
else
{
if (filterContext.HttpContext.Session.IsNewSession)
{
// Do Something For A New Session
}
base.HandleUnauthorizedRequest(filterContext);
}
}
}