SQL LIFE

Asp.Net Mvc C# Session ve FormsAuthentication

Merhaba,
bu yazımda asp.net mvc web uygulamalarımızda kullanabileceğimiz pratik bir FormsAuthentication ve session işlem kodları paylaşacağım. Diyelim ki uygulamanızda kullanıcı girişi var ve login işlemi yoksa diğer sayfalara eriştirmek istemiyorsunuz veya loglama, caching işlemleri yapmak istiyoruz, mvc bize actionfilter seçeneğini sunuyor.
 
Öncelikle mvc bize bir ActionFilterAttribute abstract sınıfı ile güzel bir özellik sunuyor. Action filter, bir Action metodu tetiklendiğinde  öncesinde ve sonrasında çalışır. İster belli metotlara veya direkt controller’a atanabilir. Kendi custom filter’ınızı oluşturabilirsiniz. Ben bu yazıda olayı anlamamız açısından kendi custom filter’ımı oluşturacağım.

public class SessionControl : ActionFilterAttribute
OnActionExecuted, OnActionExecuting, OnResultExecuted, OnResultExecuting metotlarını override etmiş olacağız.



Ayrıca Session değişkenini de kullanıyorum. Session’lar her türlü veri tipini saklayabilen yapılardır, kullanıcıya ve browser’a özeldir.

Asp.net mvc bize hazır halini de sunmakta: [Authorize]

İşleme başlarken web.config şu satıları ekliyoruz.

 
    <authentication mode="Forms">
      <forms loginUrl="~/DashboardLogin/Login"  timeout="3000" />
    </authentication>

Uygulamaya yönlendireceği login sayfasını belirtmiş oluyoruz başarısız bir auth işleminde.

Şimdi de SessionControl sınıfı:

 
public class SessionControl : ActionFilterAttribute
    {
        
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
           
           
        }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
 

            if (!HttpContext.Current.Request.IsAuthenticated || HttpContext.Current.Session["Kullanici"] == null)
            {
                if (!filterContext.HttpContext.Response.IsRequestBeingRedirected)
                {
                
                                  FormsAuthentication.SignOut();
      filterContext.HttpContext.Response.Redirect("/DashboardLogin/Login");
                }

            }
            base.OnActionExecuting(filterContext);
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
        }

        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
            filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
            filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
            filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            filterContext.HttpContext.Response.Cache.SetNoStore();
            base.OnResultExecuting(filterContext);
        }

        public override string ToString()
        {
            return base.ToString();
        }
    }
}




 
  [HttpPost]
        public ActionResult Login( LoginViewModel model)
        {
            var user = db.Kullanici.Where(x => x.mail == model.EMail && x.sifre == model.Password);
            if (!user.Any())
            {
                ViewBag.Message = "Başarısız İşlem";
                return View(model);
            }
            if (user.FirstOrDefault().kullanici_id > 0)
            {
                Session["Kullanici"] = (Kullanici)user.FirstOrDefault();
                FormsAuthentication.SetAuthCookie(model.EMail, true);
                return RedirectToAction("Index", "Home");
            }
            return View();
        }

 

İşlemler bittikten sonra istediğiniz Controller’a notasyon şeklinde belirterek artık Auth işlemini uygulamış oluyoruz.

   [Session.SessionControl]
    public class BildirimsController : Controller

 

View kısmı:

@model FileUploadServis.Models.LoginViewModel
@{
    ViewBag.Title = "Login";
}
@{
    Layout = null;
}

<!DOCTYPE html>
<html lang="en">

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>GİRİŞ</title>

    <!-- Custom fonts for this template-->
    <link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet" type="text/css">
    <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">

    <!-- Custom styles for this template-->
    <link href="~/Content/sb-admin-2.min.css" rel="stylesheet">

</head>

<body class="bg-gradient-primary">

    <div class="container">

        <!-- Outer Row -->
        <div class="row justify-content-center">

            <div class="col-xl-10 col-lg-12 col-md-9">

                <div class="card o-hidden border-0 shadow-lg my-5">
                    <div class="card-body p-0">
                        <!-- Nested Row within Card Body -->
                        <div class="row">
                            <div class="col-lg-6 d-none d-lg-block bg-login-image" style="background-image:url('../../Content/reaim.jpg');background-size:550px 430px; box-shadow:2px 2px 4px #808080;"></div>
                            <div class="col-lg-6">
                                <div class="p-5">
                                    <div class="text-center" style="box-shadow:2px 2px 4px #4e73df;box-shadow:2px 2px 4px #808080;">
                                        <h1 class="h4 text-gray-900 mb-4">Bildirim Paneli</h1>
                                    </div>

                                    @using (Html.BeginForm("Login", "DashBoardLogin", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
                                    {
                                        <form class="user">
                                            <div class="form-group">
                                                <input type="email" class="form-control form-control-user" name="email" id="email" aria-describedby="emailHelp" placeholder="Mail Adresini Giriniz">
                                            </div>
                                            <div class="form-group">
                                                <input type="password" class="form-control form-control-user" name="password" placeholder="Şifre">
                                            </div>
                                            <div class="form-group">
                                                <div class="custom-control custom-checkbox small">
                                                    <input type="checkbox" class="custom-control-input" id="customCheck">
                                                    <label class="custom-control-label" for="customCheck">Remember Me</label>
                                                </div>
                                            </div>
                                            <button id="Login" value="Login" type="submit" class="btn btn-primary btn-user btn-block">Giriş Yap </button>

                                            <hr>
                          
                                        </form>
                                    }
                                        <hr>
                                
                                      
                                    </div>
                            </div>
                        </div>
                    </div>
                </div>

            </div>

        </div>

    </div>

    <!-- Bootstrap core JavaScript-->
    <script src="vendor/jquery/jquery.min.js"></script>
    <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>

    <!-- Core plugin JavaScript-->
    <script src="vendor/jquery-easing/jquery.easing.min.js"></script>

    <!-- Custom scripts for all pages-->
    <script src="js/sb-admin-2.min.js"></script>

</body>

</html>



 

#
Ezgim Çelik
They didn't know it was impossible, so they did it - Mark Twain