.Net Mvc 사용자 로그인 여부, 로그인하지 않은 경우 다시 로그인 페이지로 이동, 3가지 완벽한 솔루션 판단
1 public ActionResult ProcessLogin()
2 {
3 try
4 {
5 string user_name = Request["LoginId"];
6 string user_pwd = Request["LoginPwd"];
7 UserInfo model = new UserInfo();
8 model.UName = user_name;
9 model.UPwd = user_pwd;
10 if (bllSession.UserInfo.Select(model).Count > 0) //
11 {
12 Session["loginUser"] = user_name; //
13 return Content("ok");
14 }
15 else
16 {
17 return Content(" ! ?");
18 }
19 }
20 catch (Exception ex)
21 {
22 throw ex;
23 }
24 }
다음은 사용자 로그인을 검사하는 몇 가지 방법을 보여 줍니다
방식 1
각 페이지가 실행되기 전에 현재 사용자의 로그인 여부를 판단합니다. 만약에 로그인해야 현재 페이지에 들어갈 수 있습니다. 로그인하지 않으면 첫 페이지로 돌아갑니다. 사이트의 페이지가 적으면 각 페이지에 이 방법을 추가할 수 있습니다. 프로젝트 모듈이 점점 많아지면서 스티커를 어떻게 복사하려고 합니까?Don't repeat youself!
1 public ActionResult Index()
2 {
3 if (Session["loginUser"] == null)
4 {
5 return RedirectToAction("Index", "UserLogin");
6 }
7 return View();
8 }
방식 2
전역 필터에서 사용자가 로그인했는지 확인
검증 클래스 생성(LoginCheckFilterAttribute.cs) 1 using System.Web.Mvc;
2
3 namespace Sam.OA.WEBAPP.Models
4 {
5 ///
6 ///
7 ///
8 public class LoginCheckFilterAttribute: ActionFilterAttribute // :ActionFilterAttribute
9 {
10 ///
11 /// , true
12 ///
13 public bool IsChecked { get; set; }
14 public override void OnActionExecuted(ActionExecutedContext filterContext)
15 {
16 base.OnActionExecuted(filterContext);
17 //
18 if (IsChecked)
19 {
20 if (filterContext.HttpContext.Session["loginUser"] == null)
21 {
22 filterContext.HttpContext.Response.Redirect("/UserLogin/Index");
23 }
24 }
25 }
26 }
27 }
각 페이지가 실행되기 전에 현재 사용자의 로그인 여부를 판단합니다. 만약에 로그인해야 현재 페이지에 들어갈 수 있습니다. 로그인하지 않으면 첫 페이지로 돌아갑니다. 사이트의 페이지가 적으면 각 페이지에 이 방법을 추가할 수 있습니다. 프로젝트 모듈이 점점 많아지면서 스티커를 어떻게 복사하려고 합니까?Don't repeat youself!
1 public ActionResult Index()
2 {
3 if (Session["loginUser"] == null)
4 {
5 return RedirectToAction("Index", "UserLogin");
6 }
7 return View();
8 }
방식 2
전역 필터에서 사용자가 로그인했는지 확인
검증 클래스 생성(LoginCheckFilterAttribute.cs) 1 using System.Web.Mvc;
2
3 namespace Sam.OA.WEBAPP.Models
4 {
5 ///
6 ///
7 ///
8 public class LoginCheckFilterAttribute: ActionFilterAttribute // :ActionFilterAttribute
9 {
10 ///
11 /// , true
12 ///
13 public bool IsChecked { get; set; }
14 public override void OnActionExecuted(ActionExecutedContext filterContext)
15 {
16 base.OnActionExecuted(filterContext);
17 //
18 if (IsChecked)
19 {
20 if (filterContext.HttpContext.Session["loginUser"] == null)
21 {
22 filterContext.HttpContext.Response.Redirect("/UserLogin/Index");
23 }
24 }
25 }
26 }
27 }
1 using System.Web.Mvc;
2
3 namespace Sam.OA.WEBAPP.Models
4 {
5 ///
6 ///
7 ///
8 public class LoginCheckFilterAttribute: ActionFilterAttribute // :ActionFilterAttribute
9 {
10 ///
11 /// , true
12 ///
13 public bool IsChecked { get; set; }
14 public override void OnActionExecuted(ActionExecutedContext filterContext)
15 {
16 base.OnActionExecuted(filterContext);
17 //
18 if (IsChecked)
19 {
20 if (filterContext.HttpContext.Session["loginUser"] == null)
21 {
22 filterContext.HttpContext.Response.Redirect("/UserLogin/Index");
23 }
24 }
25 }
26 }
27 }
在全局过滤器中添加这方法(FilterConfig.cs)
1 using Sam.OA.WEBAPP.Models;
2 using System.Web.Mvc;
3
4 namespace Sam.OA.WEBAPP
5 {
6 public class FilterConfig
7 {
8 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
9 {
10 //filters.Add(new HandleErrorAttribute());
11 filters.Add(new MyExceptionFilterAttribute()); //
12
13 // ,
14 filters.Add(new LoginCheckFilterAttribute() { IsChecked=true});
15 }
16 }
17 }
이렇게 되면 모든 페이지가 사용자가 로그인했는지 검사할 것이다. 그러나 실제적으로 하필 일부 부분은 사용자가 로그인했는지 검사할 필요가 없다. 예를 들어 로그인 페이지, 이때 우리는 어떻게 이 문제를 해결합니까?우리는 클래스에 라벨을 붙일 수 있다
사용자 로그인 컨트롤러(UserLoginController.cs)
1 using Sam.OA.BLLFactory;
2 using Sam.OA.Model.Sam;
3 using Sam.OA.WEBAPP.Models;
4 using System;
5 using System.Web.Mvc;
6
7 namespace Sam.OA.WEBAPP.Controllers
8 {
9 ///
10 /// ,
11 ///
12 [LoginCheckFilterAttribute(IsChecked =false)]
13 public class UserLoginController : Controller
14 {
15 // GET: UserLogin
16 public ActionResult Index()
17 {
18 return View();
19 }
20 IBllSession bllSession = BllSessionFactory.GetCurrentBllSession();
21 ///
22 ///
23 ///
24 ///
25 public ActionResult ProcessLogin()
26 {
27 try
28 {
29 string user_name = Request["LoginId"];
30 string user_pwd = Request["LoginPwd"];
31 UserInfo model = new UserInfo();
32 model.UName = user_name;
33 model.UPwd = user_pwd;
34 if (bllSession.UserInfo.Select(model).Count > 0) //
35 {
36 Session["loginUser"] = user_name;
37 return Content("ok");
38 }
39 else
40 {
41 return Content(" ! ?");
42 }
43 }
44 catch (Exception ex)
45 {
46 throw ex;
47 }
48 }
49 }
50 }
이렇게 되면 문제가 완벽하게 해결되어 사용자가 로그인했는지 확인할 필요가 없는 곳에 라벨을 붙일 필요가 없습니다~~~
사각형 3
컨트롤러 기본 클래스(BaseController.cs)를 수동으로 만듭니다. 1 using System.Web.Mvc;
2
3 namespace Sam.OA.WEBAPP.Controllers
4 {
5 ///
6 ///
7 /// :
8 /// :2019 8 22 23:53:35
9 ///
10 public class BaseController:Controller
11 {
12 public bool IsCheckedUserLogin = true;
13 protected override void OnActionExecuted(ActionExecutedContext filterContext)
14 {
15 base.OnActionExecuted(filterContext);
16 //
17 if (IsCheckedUserLogin )
18 {
19 if (filterContext.HttpContext.Session["loginUser"] == null)
20 {
21 filterContext.HttpContext.Response.Redirect("/UserLogin/Index");
22 }
23 }
24 }
25 }
26 }
이때, 우리가 검사해야 할 컨트롤러는 모두 계승 컨트롤러의 기본 클래스로 바꾸었다
1 using Sam.OA.BLLFactory;
2 using Sam.OA.Model.Sam;
3 using System.Web.Mvc;
4
5 namespace Sam.OA.WEBAPP.Controllers
6 {
7 ///
8 /// :Controller :BaseController
9 ///
10 public class UserInfoController : BaseController //:Controller
11 {
12 // GET: UserInfo
13 IBllSession bll = BllSessionFactory.GetCurrentBllSession();
14 public ActionResult Index()
15 {
16 UserInfo model = new UserInfo();
17 ViewData.Model = bll.UserInfo.Select(model,"1=1");
18 return View();
19 }
20 public ActionResult Create()
21 {
22 return View();
23 }
24 [HttpPost]
25 public ActionResult Create(UserInfo model)
26 {
27 if (ModelState.IsValid)
28 {
29 bll.UserInfo.Add(model);
30 }
31 return RedirectToAction("Index");
32 }
33 }
34 }
그러면 문제가 또 생겼습니다. 몇몇 페이지는 검사를 하지 않으면 어떻게 합니까?기류를 계승하지 않거나, 아래의 방법에 따라 배치하면, 매우 유연하다고 느끼지 않겠는가
1 using Sam.OA.BLLFactory;
2 using Sam.OA.Model.Sam;
3 using System;
4 using System.Web.Mvc;
5
6 namespace Sam.OA.WEBAPP.Controllers
7 {
8 public class UserLoginController :BaseController //:Controller
9 {
10 public UserLoginController()
11 {
12 this.IsCheckedUserLogin = false; //
13 }
14 // GET: UserLogin
15 public ActionResult Index()
16 {
17 return View();
18 }
19 IBllSession bllSession = BllSessionFactory.GetCurrentBllSession();
20 ///
21 ///
22 ///
23 ///
24 public ActionResult ProcessLogin()
25 {
26 try
27 {
28 string user_name = Request["LoginId"];
29 string user_pwd = Request["LoginPwd"];
30 UserInfo model = new UserInfo();
31 model.UName = user_name;
32 model.UPwd = user_pwd;
33 if (bllSession.UserInfo.Select(model).Count > 0) //
34 {
35 Session["loginUser"] = user_name;
36 return Content("ok");
37 }
38 else
39 {
40 return Content(" ! ?");
41 }
42 }
43 catch (Exception ex)
44 {
45 throw ex;
46 }
47 }
48 }
49 }
이상 모든 문제가 완벽하게 해결되었습니다~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.