原文链接:http://www.codeproject.com/Tips/790387/Session-in-ASP-NET-MVC
1.前言
今天有得有失啊,看到这篇,专心记下里面的精华吧
2.一般在Web程序中,使用Session可能会有以下的用途
a.检查用户是否登录
b.保存权限信息
c.保存临时数据
有时,我们会频繁地改变Session保存的对象,现在,我们尝试在一个Controller中集中管理Session,这样可以应用于其它的Controller,达到重用的效果
3.在开始之前,我们先考虑下面的情景
a.如果你想使用一个session,而这个session是整个页面使用的,这会是一个不错的技巧
b.如果一个控制器是依靠seesion是否为null,来重定向到一个登录页面
c.不是否所有的控制器是依靠session,比如LogOnController和ErrorController,这些控制器本来就是因为没有session值的,要与b情况加以区别
4.好了,开始码代码吧
我们程序中一个基本控制器,集中处理session,TSource中我们要保存在sesion中的信息的类型,可以使用两种方法去实现
a.如果一个控制器是依赖session的,那么不去继承
b.如果一个控制器是依赖session的,我们也要去继承
1 public class ApplicationController<TSource> : Controller 2 { 3 private const string LogOnSession = "LogOnSession"; 4 private const string ErrorController = "Error"; 5 private const string LogOnController = "LogOn"; 6 private const string LogOnAction = "LogOn"; 7 8 protected ApplicationController() 9 { 10 } 11 12 protected override void Initialize(RequestContext requestContext) 13 { 14 base.Initialize(requestContext); 15 if (!IsNonSessionController(requestContext) && HasSession()) 16 { 17 Rederect(requestContext, Url.Action(LogOnAction, LogOnController)); 18 } 19 } 20 21 private bool IsNonSessionController(RequestContext requestContext) 22 { 23 var currentController = 24 requestContext.RouteData.Values["controller"].ToString().ToLower(); 25 var nonSessionController = 26 new List<string>() { ErrorController.ToLower(), LogOnController.ToLower() }; 27 return nonSessionController.Contains(currentController); 28 } 29 30 private void Rederect(RequestContext requestContext, string action) 31 { 32 requestContext.HttpContext.Response.Clear(); 33 requestContext.HttpContext.Response.Redirect(action); 34 requestContext.HttpContext.Response.End(); 35 } 36 37 protected bool HasSession() 38 { 39 return Session[LogOnSession] != null; 40 } 41 42 protected TSource GetLogOnSessionModel() 43 { 44 return (TSource)this.Session[LogOnSession]; 45 } 46 47 protected void SetLogOnSessionModel(TSource model) 48 { 49 Session[LogOnSession] = model; 50 } 51 52 protected void AbandonSession() 53 { 54 if (HasSession()) 55 { 56 Session.Abandon(); 57 } 58 } 59 }
5.结尾(自己)
这么文章虽然是一个技巧,但我很少用这个,但他在规划这些个方法的时候,应该是有一个大局观,这个是我要学习的地方。当然session也不仅仅只使用到这种情景,自己存些别东西也是可以的。
003.ASP.NET MVC集中管理Session,布布扣,bubuko.com
时间: 2024-10-24 01:52:54