ASP.NET MVC Controller Session问题
发现问题
最近在项目中遇到这样一个问题,一直没办法重现,所以几天都没有解决。
测试那边给出的问题是这样的:每天早上来的时候,第一次通过单点登录到系统的时候,总会跳转回登录界面,再次登录就好了。当时给我的第一印象是,好怪啊,不过应该是系统中的问题,根据描述,我这边也测试了,不过在我这里就是不重现这个问题。昨天下班后,自己在研究别的问题,突然感觉的一丝灵感,既然是每天第一次出现问题,应该是什么东西过期了,才会导致这样的问题。就想到了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问题的更多相关文章
- .NET/ASP.NET MVC Controller 控制器(IController控制器的创建过程)
		阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ... 
- 三、ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)
		阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ... 
- 转载ASP.NET MVC中Session的处理机制
		本文章转载自 http://www.cnblogs.com/darrenji/p/3951065.html ASP.NET MVC中的Session以及处理方式 最近在ASP.NET MVC项目中 ... 
- Asp.net Mvc 自定义Session (二)
		在 Asp.net Mvc 自定义Session (一)中我们把数据缓存工具类写好了,今天在我们在这篇把 剩下的自定义Session写完 首先还请大家跟着我的思路一步步的来实现,既然我们要自定义Ses ... 
- 实现Asp.net Mvc分布式Session Redis群集
		Redis群集实现Asp.net Mvc分布式Session Session的缺点 众所周知Asp.net Session默认存储在IIS中,IIS的重启会导致Session丢失. 如果你的网站使用了 ... 
- ASP.NET MVC Controller的激活
		最近抽空看了一下ASP.NET MVC的部分源码,顺带写篇文章做个笔记以便日后查看. 在UrlRoutingModule模块中,将请求处理程序映射到了MvcHandler中,因此,说起Controll ... 
- ASP.NET MVC之Session State性能问题(七)
		前言 这一节翻译一篇有关Session State性能问题的文章,非一字一句翻译. 话题 不知道我们在真实环境中是否用到了Session State特性,它主要用来当在同一浏览器发出多个请求时来存储数 ... 
- ASP.NET MVC controller 之间传JS值
		在ASP.NET MVC中有东西叫TempData,它的类型是TempDataDictionary,它与ViewData以及ViewBag的不同之处在于 它的内部是使用session来保存信息的,可以 ... 
- ASP.NET MVC Controller激活系统详解1
		一.引言 好久没有写博客了,前一段时间学习了Controller激活的一篇很好的博文(链接),在此做个学习总结. 二.Controller 2.1 IController Controller类型直接 ... 
随机推荐
- makefile中的伪目标
			伪目标就是总是被执行的目标,相对于目标来说,伪目标不会去考虑它的依赖的时间戳与自己时间戳的新旧关系,从而决定是否执行规则.伪目标格式: .PHONY:clean clean: -rm *.o 在mak ... 
- [资料分享]迅为iTOP4412开发板-SDIO WiFi移植文档
			本文转自迅为:http://www.topeetboard.com 概述 近期需要把WiFi无线网络功能移植到iTOP-4412 开发平台,查阅了相关资料,经过一段时间的研究.调试,终于成功的将WiF ... 
- 通用cube refresh方案
			通用cube refresh c# script 解决方法: 需要设置的变量如下: User::varcubename,User::varolapconnstr,User::varolapdbname ... 
- 【读书笔记《Android游戏编程之从零开始》】5.Android 游戏开发常用的系统控件(ProgressBar、Seekbar)
			3.7 ProgressBar ProgressBar类官方文档地址:http://developer.android.com/reference/android/widget/ProgressBar ... 
- 平摊分析 Amortized Analysis ------geeksforgeeks翻译
			当偶尔一切操作很花的时间很慢,而大多数操作的时间都很快的时候,平摊分析的方法就很很好用了.在平摊分析中,我们分析一串操作并且可以得到最坏情况下的平均时间复杂度.例如hash table, disjoi ... 
- Appium路线图及1.0正式版发布
			Appium更新的速度极快,从我试用时候的0.12到1.0(0.18版本后就是1.0),完全符合移动互联网的节奏. 更新可能会慢,可以多试几次 整理了testerhome上思寒发表的帖子,让我们来看下 ... 
- Spring 一二事(5) - 依赖注入
			<!-- 依赖注入的装配过程 --> <bean id="person" class="com.lee.spring007.di.xml.setter. ... 
- Android数据存储(一)----SharedPreferences详解
			一.Android数据的存储方式: Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File:此外还有一种网络存储 ... 
- Unity摄像机的正交视图与透视图
			Unity Camera的两种模式 Projection:投射,投影 Unity的MainCamera的Projection可选择Perspective[透视],Orthographic[正交],是指 ... 
- JMeter学习(二十五)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults
			Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ... 
