原文链接: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的,我们也要去继承

 public class ApplicationController<TSource> : Controller
{
private const string LogOnSession = "LogOnSession";
private const string ErrorController = "Error";
private const string LogOnController = "LogOn";
private const string LogOnAction = "LogOn"; protected ApplicationController()
{
} protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
if (!IsNonSessionController(requestContext) && HasSession())
{
Rederect(requestContext, Url.Action(LogOnAction, LogOnController));
}
} private bool IsNonSessionController(RequestContext requestContext)
{
var currentController =
requestContext.RouteData.Values["controller"].ToString().ToLower();
var nonSessionController =
new List<string>() { ErrorController.ToLower(), LogOnController.ToLower() };
return nonSessionController.Contains(currentController);
} private void Rederect(RequestContext requestContext, string action)
{
requestContext.HttpContext.Response.Clear();
requestContext.HttpContext.Response.Redirect(action);
requestContext.HttpContext.Response.End();
} protected bool HasSession()
{
return Session[LogOnSession] != null;
} protected TSource GetLogOnSessionModel()
{
return (TSource)this.Session[LogOnSession];
} protected void SetLogOnSessionModel(TSource model)
{
Session[LogOnSession] = model;
} protected void AbandonSession()
{
if (HasSession())
{
Session.Abandon();
}
}
}

5.结尾(自己)

这么文章虽然是一个技巧,但我很少用这个,但他在规划这些个方法的时候,应该是有一个大局观,这个是我要学习的地方。当然session也不仅仅只使用到这种情景,自己存些别东西也是可以的。  

最新文章

  1. SourceInsight阅读Python---张子芳
  2. html_01之基础标签
  3. PHP内置的字符串处理函数
  4. Python3 学习第九弹: 模块学习二之文件管理模块
  5. 为了支持AOP的编程模式,我为.NET Core写了一个轻量级的Interception框架[开源]
  6. 一个开源的可视化的jQuery工作流插件
  7. Struct.xml Action配置
  8. 可以让PHP编程事半功倍的类库
  9. WPF 打开文件 打开路径对话框
  10. LFS: Interface eth0 doesn&#39;t exist
  11. Java的函数与函数重载
  12. 排序算法(二)Sort with Swap(0,*)
  13. PyQt5--EventHandler
  14. Windows 7上安装配置TensorFlow-GPU运算环境
  15. Boosting 简单介绍
  16. 手动搭建 redis 集群
  17. cobbler部署以及使用
  18. Chrome浏览器缓存查看工具-ChromeCacheView
  19. J2EE项目异常处理(转)
  20. 数据结构实习 problem L 由二叉树的中序层序重建二叉树

热门文章

  1. Linux删除包含特殊符号文件名的文件
  2. docker的一些用法
  3. jQuery formValidator使用入门
  4. Highcharts 功能强大、开源、美观、图表丰富、兼容绝大多数浏览器的纯js图表库
  5. HDU 3555 Bomb 数位DP 入门
  6. vs2012出现无法启动iis express web 服务器的错误
  7. 转-TabHost组件(二)(实现底部菜单导航)
  8. Error: L6218E: Undefined symbol TIM_ARRPreloadConfig (referred from pwm_output.o).
  9. MDK+硬件仿真器实现debugprintf()-stm32
  10. ZK框架的分析与应用