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

003.ASP.NET MVC集中管理Session,布布扣,bubuko.com

时间: 2024-10-24 01:52:54

003.ASP.NET MVC集中管理Session的相关文章

ASP.NET MVC之Session State性能问题(七)

前言 这一节翻译一篇有关Session State性能问题的文章,非一字一句翻译. 话题 不知道我们在真实环境中是否用到了Session State特性,它主要用来当在同一浏览器发出多个请求时来存储数据,在现在我们更多的为了避免整个页面刷新,Web应用程序更多倾向于利用高扩展性的Ajax,但是不知道我们是否注意到当我们使用Session数据多次请求MVC上的Action方法时产生的性能问题呢? 将Session放入上下文中(Put Session into the Context) 在进行代码演

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

验证登录状态的方法有:1  进程外Session   2 方法过滤器(建一个类继承ActionFilterAttribute)然后给需要验证的方法或控制器加特性标签 3 :新建一个BaseController  继承Controller   把后面需要验证的控制器都改成继承BaseController   而不是Controller [csharp] view plain copy print? namespace Core.ProjectOA.WebApp.Controllers { publ

Asp.net Mvc 自定义Session (一)

大家都知道用系统默认的session 会存在这样的问题 如果用户过多的话 session 会自动消亡,而且不能支持分布式和集群. 这系列博客主要讲解  怎样 解决用户过多的session自动消亡,和分布式集群 使用例子 Session["test"] = "啄木鸟"; 完全不改变系统的使用风格,可以直接升级系统:     在这里我们主要用的 HttpRuntime.cache 和 memcache. 希望读者这跟着我的思路,一步一步来设计自定义Session 首先,

ASP.NET MVC中的Session以及处理方式

最近在ASP.NET MVC项目中碰到这样的情况:在一个controller中设置了Session,但在另一个controller的构造函数中无法获取该 Session,会报"System.NullReferenceException"错误.之所以这样做是因为希望在controller构造函数中获 取Session值并赋值给一个全局变量,好让该controller的多个action共享. 起先以为是ASP.NET State Service服务没有开启,或者是Web.config中se

MVC之Session State性能

ASP.NET MVC之Session State性能问题(七) 前言 这一节翻译一篇有关Session State性能问题的文章,非一字一句翻译. 话题 不知道我们在真实环境中是否用到了Session State特性,它主要用来当在同一浏览器发出多个请求时来存储数据,在现在我们更多的为了避免整个页面刷新,Web应用程序更多倾向于利用高扩展性的Ajax,但是不知道我们是否注意到当我们使用Session数据多次请求MVC上的Action方法时产生的性能问题呢? 将Session放入上下文中(Put

ASP.NET MVC开发学习过程中遇到的细节问题以及注意事项

1.datagrid中JS函数传值问题: columns: { field: 'TypeName', title: '分类名称', width: 120, sortable: true, formatter: function (value, row, index) { var contentDetails = "<a href='' style='text-decoration: none;' onclick='showDetailsDialog(" + row.ID + &q

[备用]权限设计方案、如何使用session、MVC如何使用模板、DropdownList、怎么添加Bootstrape框架、使用ASP.NET MVC 4 Bootstrap Layout Template(VS2012)

1.权限设计方案: http://jingyan.baidu.com/article/9f63fb91ae22bac8410f0e70.html 2.如何使用session: 控制器中使用session namespace me.Controllers { public class LoginController : Controller { // // GET: /Login/ public ActionResult Index() { //设置session this.HttpContext

NHibernate中Session与ASP.NET MVC中Action的综合使用

NHibernate的基本特征是完成面向对象的程序设计语言到关系数据库的映射,在NHibernate中使用持久化对象PO(Persistent Object)完成持久化操作,对PO的操作必须在Session管理下才能同步到数据库, 但是这里的Session并非指HttpSession,可以理解为基于ADO.NET的Connnection,Session是NHibernate运作的中心,对象的生命周期.事务的管理.数据库的存取都与Session息息相关,首先,我们需要知道, SessionFact

ASP.NET MVC中使用Session来保持表单的状态

本篇实践在ASP.NET MVC 4下使用Session来保持表单的状态. 本篇的源码在这里: https://github.com/darrenji/KeepFormStateUsingSession 如上,输入俱乐部名称,点击"添加球员",输入球员名称.我们希望,点击"到别的地方转转"跳转到另外一个视图页,当再次返回的时候能保持表单的状态. 点击"到别的地方转转"跳转到另外一个视图页如下: 再次返回,表单的状态被保持了: 点击"提交