zoukankan      html  css  js  c++  java
  • 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也不仅仅只使用到这种情景,自己存些别东西也是可以的。  

  • 相关阅读:
    shell脚本编写实例
    正则表达式文本过滤
    bootstrap实现嵌套列
    当鼠标悬停在链接上,或者点击过的链接,颜色会被设置为 #2a6496。同时,会呈现一条下划线。点击过的链接,会呈现一个颜色码为 #333 的细的虚线轮廓。另一条规则是设置轮廓为 5 像素宽,且对于基于 webkit 浏览器有一个 -webkit-focus-ring-color 的浏览器扩展。轮廓偏移设置为 -2 像素
    bootstrap页面效果图
    bootstrap实现菜单定位
    bootstrap三列布局
    bootstrap图片切换效果
    bootstrap导航菜单
    首字下沉
  • 原文地址:https://www.cnblogs.com/a2htray/p/3832663.html
Copyright © 2011-2022 走看看