003.ASP.NET MVC集中管理Session

原文链接: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也不仅仅只使用到这种情景,自己存些别东西也是可以的。  

posted on 2014-07-08 23:11  a2htray  阅读(867)  评论(0编辑  收藏  举报

导航