下面是个简单的用Session判断未登陆的用户不能进VIP那个目录
public class MyHttpModule:IHttpModule
{
    public void Dispose() { }    public void Init(HttpApplication app) {
        app.AcquireRequestState += new EventHandler(app_AcquireRequestState);
    }    public void app_AcquireRequestState(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        string path = app.Request.RawUrl.ToUpper();
        if (app.Session["UserIsValid"] == null || app.Session["UserIsValid"].ToString().Trim().Equals("1") == false) {
            if (path.Contains("/VIP/")) {
                app.CompleteRequest();
                app.Response.Redirect(app.Request.ApplicationPath+"/"+"login.aspx");          
            }
        }
    }
}
错误提示:Session会话状态在此上下文中不可用。
在AcquireRequestState 应该能访问到的呀.
(另外,我重新建个网站,同样的代码,却可以运行)
不能运行的项目用了UrlRewriter.这应该没关吧.
请告诉我为什么会出现这种错误啊.
我改成app.context.Session["UserIsValid"]  还显示未将对象引用到实例上. 
我又改成(string)app.Session["UserIsValid"] 错误依旧.........

解决方案 »

  1.   

    AcquireRequestState 还没有获得session,改用 PostAcquireRequestState 事件
      

  2.   

    Session也是用http module实现的,在你的http module初始化的时候Session未必初始化了
    解决方法参考 http://www.eggheadcafe.com/articles/20030211.asp
      

  3.   

    AcquireRequestState
    这个方法里面还没有session
    你需要继承一个接口才可以使用
      

  4.   

    我改成PostAcquireRequestState方法,但if (app.Session["UserIsValid"] == null || app.Session["UserIsValid"].ToString().Trim().Equals("1") == false) { 
     提示 : 未将对象引用设置到对象的实例.你们可以说详细一点吗,我真搞不懂这个问题.
      

  5.   

    请检查发生异常的时候是否存在Session,可能有下面这种情况发生:
    取决于你的UrlWriter组件的实现,这个异常的抛出很可能是这个组件在导航页面时产生的。
      

  6.   

    应该是login时没有赋值session["uerid"]="33333";
      

  7.   

    1.引用using System.Web.SessionState;
    2.继承接口public class MyHttpModule:IHttpModule ,IRequiresSessionState
      

  8.   

    继承IHttpModule  或 IHttpHander 的类使用 session 需要继承
    IRequiresSessionState 
      

  9.   

    你们的方法我都试过了.加了IRequiresSessionState接口,还断点看了.
    还是不行.
    我现在随便开其他的页面,都提示,
     if (app.Context.Session["UserIsValid"] == null || (string)app.Context.Session["UserIsValid"]=="1")  未将对象引用设置到对象的实例我断点看的时,第一次到断点没问题,但继续在此到断点时就提示上头的错误了.我很纳闷,同样的代码,我重新建的网站里,运行没任何问题.........这.........
      

  10.   

    大哥们. 我只要加了UrlRewriter组件到网站, 就会出现上面的错误.是不是用了UrlRewriter 就不能在去实现自己的IHttpModule.8楼的大哥.你说的好象是对的. 请问怎么解决啊?   好急啊...
      

  11.   

    去掉urlrewriter试试可以么,再说哪个的问题
      

  12.   

    我删除urlrewrite干净后,动态页面可以看一次,但再次刷新就提示未将对象引用.静态页面一打开就提示会话状态在此上下文中不可用,或是未将对象引用.是不是urlrewrite的问题呀? 
      

  13.   

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Web.SessionState;namespace HRManageWeb
    {
        public class CheckLogin:IHttpModule
        {
            
            #region IHttpModule 成员        public void Dispose()
            {        }        public void Init(HttpApplication context)
            {
                context.AcquireRequestState += new EventHandler(loginCheck_PostAcquireRequestState);        }        #endregion        private void loginCheck_PostAcquireRequestState(object sender, EventArgs e)
            {
                HttpApplication app = (HttpApplication)sender;
                if (app.Context.Handler is IRequiresSessionState || app.Context.Handler is IReadOnlySessionState)
                {
                    if (app.Context.Session["LoginUser"] == null &&
                        !app.Context.Request.RawUrl.EndsWith("Default.aspx"))
                        app.Context.Response.Redirect("~/Default.aspx");
                }
            }
        }
    }