代码如下
 protected void Page_Load(object sender, EventArgs e)
 {
        if (Session["login"]==null)
        {
            Session["url"] = "addUser.aspx";
         
            Jscript.AlertAndRedirect("请先登录系统", "right.aspx");
            return;
        } }
  protected void Button1_Click(object sender, EventArgs e)
  {
        string strTemp = Session["login"].ToString();
  }  button事件会触发回调事件,所以我觉得如果session失效在点击事件发生的时候page_load中的代码应该发挥作用,提示用户重新登陆,在分部调试的过程中也印证了,但是为什么网站运行起来以后就不对了呢?session如果失效
string strTemp = Session["login"].ToString();
这里为什么会报错?

解决方案 »

  1.   

    Session["login"] 确定保存的不是对象如果是对象是会报错
      

  2.   

    你是一进入这个页面就判断session是否存在吗?不存在就跳转到adduser页面?
      

  3.   

    呵呵。。Session["login"].ToString();
    这里出了错我想问,尽然Session["login"]都已经失效了,还怎么ToString();提示错误应该是:未将对象实例化,新人更要老实点,加上Ispostback,在使用Sesion处先判断时候存在。
      

  4.   

    未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
    行 33:     {
    行 34:         //string strTemp = Jhgl.Smart.Cookie.GetCookie("login");
    行 35:         string strTemp = Session["login"].ToString();
    行 36:         
    行 37:         if (strTemp!="1")源文件: e:\webtest\WebServer\addUser.aspx.cs    行: 35 
    看这个错误感觉就是我对 一个null对象使用了tostring函数,问题是page_load函数应该在button之前触发,他应该能检测到这个session对象是空的,并跳转到登陆界面去啊?这是为什么呢?
     
      

  5.   

    为什么跳转动作没有进行,而是直接运行了button中的函数呢?
      

  6.   


    if(!IsPostback){
    if (Session["login"]==null)
      {
      Session["url"] = "addUser.aspx";
        
      Jscript.AlertAndRedirect("请先登录系统", "right.aspx");
      return;
      }
    }
      

  7.   

    protected void Page_Load(object sender, EventArgs e)
     {
      if (Session["login"]==null)
      {
      Session["url"] = "addUser.aspx";
       
      Jscript.AlertAndRedirect("请先登录系统", "right.aspx");
    Response.End(); // 加上这个看看
      return;
      } }
      

  8.   

    楼上正解,谢谢,那也就是说page_load中的函数虽然会被触发,但是button中的函数会继续执行,通过response.end()可以阻止。。学习了。