public override void Init() { //在注册管道事件中 require session state //只能在引发“HttpApplication.AcquireRequestState”之前调用“HttpContext.SetSessionStateBehavior”。 this.BeginRequest += (sender, e) => HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required); base.Init(); }
代码如上。是在global中的一个重写HttpApplication方法,就这么简单。
原理就是在管道第九个事件AcquireRequestState之前,require session state.因为第九个事件就准备开始获取session.
如果你在第九个事件或者第九个事件之后才注册,那么一定会报如下错误:只能在引发“HttpApplication.AcquireRequestState”之前调用“HttpContext.SetSessionStateBehavior”。
关于请求管道,推荐一篇园友的文章:Asp.Net请求处理之管道
原文:http://www.cnblogs.com/tdws/p/5280500.html