发现问题

  最近在项目中遇到这样一个问题,一直没办法重现,所以几天都没有解决。

  测试那边给出的问题是这样的:每天早上来的时候,第一次通过单点登录到系统的时候,总会跳转回登录界面,再次登录就好了。当时给我的第一印象是,好怪啊,不过应该是系统中的问题,根据描述,我这边也测试了,不过在我这里就是不重现这个问题。昨天下班后,自己在研究别的问题,突然感觉的一丝灵感,既然是每天第一次出现问题,应该是什么东西过期了,才会导致这样的问题。就想到了session,而session的工作原理是根据本地保存的sessionId,于是我清了浏览器的缓存和Cookie,结果问题真的重现了。对于系统问题来说,只要能重现,就算解决了一半了。

  根据我的想法,我跟踪了session的保存和读取,在LoginController中保存用户session,页面跳转到HomeController中读取session,就在这里发现了问题,在这个控制器里面根本读取不到session,这是什么问题呢?于是想到了MVC的工作机制,由于我们的访问经过路由处理器处理后,生成了响应的相应URL的实例MVCRouteHandle,对于System.Web.HttpContext.Current.Session["userinfo"]这样的方式,访问的只能是当前访问的Request的包装HttpContext中的东西,想要访问另一个路由或者说URL中Session是不行的。

  解决问题

  1、 public ActionResult Index()
        {

if (Login())
            {
                return Redirect("/Home/Main");
            }
            else
            {
                Response.Redirect(_logoutUrl);
            }
            return null;
        }

  这种方式采用了Redirect方式进行跳转,其实并不属于跳转,它是将"/Home/Main"页面的内容作为当前Action的返回值,这样就属于同一个访问域下了,Session自然能够取到;

  2、这是我从Stack Overflow上找到的一个方式,意思就是在BaseController中定义一个HttpSessionStateBase的变量用于存储Session,这种方式需要我们的Controller都是继承自BaseController,这样也是可以的。

    这里要说明一下HttpSessionStateBase是在system.web命名控件下的一个类,在system.web,mvc下的抽象类Controller下,其实已经给我们定义好了一个Session只读属性。

    

    我们可以直接使用它,所以在使用的过程中,各位要注意自己应用的使这个还是System.Web.HttpContext.Current.Session!!!

  3、我找了一些资料,网上还有一种方式是利用SessionHelper来实现的,我看了源代码,里面的实现方式是利用cookie。感兴趣大家可以去找找,应该有很多。

ASP.NET MVC Controller Session问题的更多相关文章

  1. .NET/ASP.NET MVC Controller 控制器(IController控制器的创建过程)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...

  2. 三、ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...

  3. 转载ASP.NET MVC中Session的处理机制

    本文章转载自 http://www.cnblogs.com/darrenji/p/3951065.html ASP.NET MVC中的Session以及处理方式   最近在ASP.NET MVC项目中 ...

  4. Asp.net Mvc 自定义Session (二)

    在 Asp.net Mvc 自定义Session (一)中我们把数据缓存工具类写好了,今天在我们在这篇把 剩下的自定义Session写完 首先还请大家跟着我的思路一步步的来实现,既然我们要自定义Ses ...

  5. 实现Asp.net Mvc分布式Session Redis群集

    Redis群集实现Asp.net Mvc分布式Session Session的缺点 众所周知Asp.net Session默认存储在IIS中,IIS的重启会导致Session丢失. 如果你的网站使用了 ...

  6. ASP.NET MVC Controller的激活

    最近抽空看了一下ASP.NET MVC的部分源码,顺带写篇文章做个笔记以便日后查看. 在UrlRoutingModule模块中,将请求处理程序映射到了MvcHandler中,因此,说起Controll ...

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

    前言 这一节翻译一篇有关Session State性能问题的文章,非一字一句翻译. 话题 不知道我们在真实环境中是否用到了Session State特性,它主要用来当在同一浏览器发出多个请求时来存储数 ...

  8. ASP.NET MVC controller 之间传JS值

    在ASP.NET MVC中有东西叫TempData,它的类型是TempDataDictionary,它与ViewData以及ViewBag的不同之处在于 它的内部是使用session来保存信息的,可以 ...

  9. ASP.NET MVC Controller激活系统详解1

    一.引言 好久没有写博客了,前一段时间学习了Controller激活的一篇很好的博文(链接),在此做个学习总结. 二.Controller 2.1 IController Controller类型直接 ...

随机推荐

  1. 烂泥:【解决】Ubuntu下使用SSH连接centos系统很慢

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 这几天在Ubuntu下使用SSH连接centos系统,发现连接很慢.建议一个连接大约需要30s.很是坑爹,如下: 后来查询相关资料,发现这个是Ubunt ...

  2. ubuntu下ROS安装时sudo rosdep init和rosdep update的解决方法

    问题: 在ubuntu上多次安装matlab选择合适的版本来调用摄像头,终于把系统搞坏了,重装系统后,ROS无法安装,每次安装到sudo rosdep init和rosdep update报错的问题, ...

  3. JavaScript中typeof的坑

    typeof是一个运算符,它对操作数返回的结果是一个字符串,有6种(只针对ES,不包含HOST环境对象) 'undefined' 'boolean' 'string' 'number' 'object ...

  4. 百度地图的简单使用 ——html js

    一.简介 百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,它能够帮助您在网站中构建功能丰富.交互性强的地图应用,包含了构建地图基本功能的各种接口,提供了诸如本地 ...

  5. log4j日志优先级导致的不输出日志

    在sae部署微信代码的时候,发现它的默认日志很不友好,看起来很费劲,详细看了一下说明发现它可以根据log4j的输出级别而分类输出,就拖了一个log4j的xml文件扔进项目代码,然后部署运行,发现没有日 ...

  6. 在AngularJS中实现自定义表单验证

    除了一些已经定义好了的验证(例如 必填项.最小长度.最大长度)之外,更常用的,还是需要我们自己定义表单验证,这样才能对于项目中遇到的很多非常规问题给出自己的合适的解决方案. 在表单中控制变量 表单的属 ...

  7. 自定义input[type="radio"]的样式

    对于表单,input[type="radio"] 的样式总是不那么友好,在不同的浏览器中表现不一. 为了最大程度的显示出它们的差别,并且为了好看,首先定义了一些样式: <fo ...

  8. selenium处理div生成弹框

    目前遇到的弹框有两种,一种是alert,一种是div,如果遇到div模拟的弹框,在用alert就不行了. 1. public static Alert getAlert(WebDriver dr) { ...

  9. Java虚拟机详解01----初识JVM

    主要内容如下: JVM的概念 JVM发展历史 JVM种类 Java语言规范 JVM规范 一.JVM的概念: JVM: Java Virtual Machine,意为Java虚拟机. 虚拟机: 指通过软 ...

  10. Unity开发之NGUI系列

    Unity插件收集 在Unity开发过程中会收集一些插件,收集这些插件的目的并不是我喜欢在开发中使用插件,而是本着喜欢的态度去收集的,就像我喜欢收集模型一样: 还有一点就是通过了解插件能让我知道Uni ...