• [C#][ASP.NET MVC]處理Session Timeout


    Session Timeout導回登入頁面這樣的功能大家應該並不陌生,

    而處理Session  Timeout也有很多方式(也不一定要導回登入頁面),

    可以使用client script固定時間輪詢Server(callback)不讓Session Timeout也是一種方法,

    在MVC中個人較愛操作Action Filters(比較能展現MVC在設計上的特性~XD),

    這裡自己紀錄一下。

    新增自訂類別並繼承ActionFilterAttribute

    public class CheckSessionFilterAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting( ActionExecutingContext filterContext )
            {
                HttpContext httpcontext = HttpContext.Current;
                // 確認目前要求的HttpSessionState
                if( httpcontext.Session != null )
                {
                    //確認Session是否為新建立
                    if( httpcontext.Session.IsNewSession )
                    {                     
                        //確認是否已存在cookies
                        String sessioncookie = httpcontext.Request.Headers[ "Cookie" ];
                        if( ( sessioncookie != null ) && ( sessioncookie.IndexOf( "ASP.NET_SessionId" ) >= 0 ) )
                        {
                            Logon( filterContext );                       
                        }
                    }
                }          
                base.OnActionExecuting( filterContext );
            }
            private void Logon( ActionExecutingContext filterContext )
            {
                RouteValueDictionary dictionary = new RouteValueDictionary
                    ( new
                    {
                        controller = "Account",
                        action = "Logon",
                        returnUrl = filterContext.HttpContext.Request.RawUrl
                    } );
                filterContext.Result = new RedirectToRouteResult( dictionary );
            }        
        }

    Controller

    public ActionResult Index()
            {
                Session[ "mytime" ] = DateTime.Now.ToString();
                ViewData[ "Message" ] = Session[ "mytime" ] as String;  
                return View();
            }
            [CheckSessionFilterAttribute]//自訂Action Filters
            public ActionResult About()
            {
                return View();
       }

    Web.config

    image

    設定2分鐘Session timeout。

    結果:

    image

    2分鐘過後點擊About。

    image

    導回登入頁面。

  • 相关阅读:
    Win2019 preview 版本的安装过程
    Windows 下 Docker 的简单学习使用过程之三 创建images 导出images
    Windows 下 Docker 的简单学习使用过程之二 Docker For windows
    Windows 下 Docker 的简单学习使用过程之一 dockertoolbox
    Helm 安装 nginx-ingress 的方法
    libc.so.6被删后导致系统无法使用的原因及解决方法
    centos6.x升级glibc-2.17
    jmx远程访问权限设置
    ngxtop
    nginx: [emerg] unknown directive "stub_status" in /usr/local/openresty/nginx/conf/conf.d/ngx_metric.conf:19
  • 原文地址:https://www.cnblogs.com/zlzly/p/1814714.html
Copyright © 2020-2023  润新知