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

转载于:https://www.cnblogs.com/a2htray/p/3832663.html

003.ASP.NET MVC集中管理Session相关推荐

  1. asp.net MVC 中 Session统一验证的方法

    验证登录状态的方法有:1  进程外Session   2 方法过滤器(建一个类继承ActionFilterAttribute)然后给需要验证的方法或控制器加特性标签 3 :新建一个BaseContro ...

  2. 如何进行ASP.NET MVC 的测试

    本文参考了http://stephenwalther.com/blog/的内容. 今天需要对ASP.NET MVC的Controller进行测试,我们都知道当我们在测试工程里new一个controll ...

  3. 菜鸟程序员之Asp.net MVC Session过期异常的处理

    菜鸟程序员之Asp.net MVC Session过期异常的处理 参考文章: (1)菜鸟程序员之Asp.net MVC Session过期异常的处理 (2)https://www.cnblogs.co ...

  4. Asp.net MVC使用Model Binding解除Session, Cookie等依赖

    上篇文章"Asp.net MVC使用Filter解除Session, Cookie等依赖"介绍了如何使用Filter来解除对于Session, Cookie的依赖. 其实这个也可以 ...

  5. Asp.net MVC 学习之路-003(增删改查,后端手工,前端生成)

    时间:2017-03-09 Asp.net Mvc实现增删改查 1, 创建数据库 可参考我写的EntityFramework实现过程:http://www.jianshu.com/nb/1016674 ...

  6. 窥探ASP.Net MVC底层原理 实现跨越Session的分布式TempData

    Hi,guys!Long time no see! 1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时缓存数据或者页面之间传递消息.也 ...

  7. [MVC]Asp.net MVC中的Session

    [MVC]Asp.net MVC中的Session 2008年12月9日 分类: ASP.NET, ASP.NET MVC, C#, 开发笔记 最近使用ASP.NET MVC 中的Controller ...

  8. ASP.NET MVC项目 解决session失效

    Web.config配置文件 在Web.config配置文件中,通过sessionState节点上的mode属性设置 mode值共分为5种: 1.InProc: mode默认值,只是保存当前应用程序域 ...

  9. 用C# ASP.NET MVC 实现WebSocket

    用C# ASP.NET MVC 实现WebSocket ,对于WebSocket想必都很了解了,不多说. 东西做的很粗糙 只能实现基本的聊天功能,不过基本的通信实现了,那么后序的扩展应该也不难(个人这 ...

  10. Spacebuilder:为什么选择asp.net mvc?

    该资料为Spacebuilder官方内部资料,主要详细阐述了Spacebuilder从1.0到2.0的在架构上的改变,为什么选择了微软最新的asp.net mvc技术,如何搭建一个更好的Web2.0社 ...

最新文章

  1. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...
  2. 在线白板,基于socket.io的多人在线协作工具
  3. go websocket 关闭_Go实战--使用之gorilla/websocket
  4. 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动 8
  5. 计算机维修与维护入门,计算机组装与维护基础知识
  6. chr(10) chr(13) chr(32)
  7. 【Tyvj3500】【BZOJ1031】字符加密,后缀数组
  8. C++新特性探究(十):Lambda
  9. java文件操作_Java文件操作大全
  10. 在没有创建Provision Profile权限的情况下 发布Enterprise inhouse app 的方法
  11. Office 365 Connectors 的使用与自定义开发
  12. MSSQL中如何用SQL语句查询字段类型?
  13. 【牛腩新闻发布系统】牛腩小结
  14. Windows快捷命令
  15. 高中数学压轴解答题:函数零点
  16. 如何写出优雅的React代码Clean Code vs. Dirty Code
  17. Detours的使用
  18. 稳坐青梅零食第一宝座,溜溜梅凭什么?
  19. 淘宝图片怎么编辑处理?淘宝图片处理用什么软件?
  20. Mysql备份恢复(mysqldump)

热门文章

  1. 为了中性含义替换man,英文可以引入拼音ren
  2. 编译OpenJDK8:NMAKE : fatal error U1077
  3. 没有com.sun.tools.javac.main的解决办法
  4. 解决办法:undefined reference to symbol '_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
  5. Kalman算法C++实现代码(编译运行通过)
  6. VS中,DEBUG/RELEASE的宏定义不同引起的问题
  7. 足球运动员要加强保护设备
  8. java 反射 接口_Java 怎么通过反射获取并实现这个类里面的接口,并且实现接口中的方法...
  9. php redis 是什么意思,redis协议是什么意思
  10. iPhone 无线投影到 Mac