我是个菜鸟,用asp.net写了一个简单的登陆功能,大概是这样default.aspx是登陆页面登陆成功跳转到main.html页面,此页面用的是框架结构,含三个.aspx页面。我在每个页面都有判断是否登陆超时的代码,代码如下    
protected void Page_Load(object sender, EventArgs e)
    {
        //是否已经登陆
        if (!IsPostBack)
        {
            
            if (Session["login"] == null)
            {
                
                Response.Write("<script language='javascript'>alert('登陆已超时,请重新登陆!');window.parent.location='default.aspx';</script>");
                return;
            }
         }
      }
现在出现这样的情况,在IE9(其它版本的ie没测试)下,如果超时,能提示并自动转到default.asp页面,但无法正常登陆了,点登陆后就立刻弹出alert('登陆已超时,请重新登陆!');但在火狐下测试正常,请问怎么解决?另外想请教下,有没有更好的实现方法?

解决方案 »

  1.   

    使用母版页,百度: asp.net master pages    或  asp.net 母版页
      

  2.   

    if (Session["login"] == null)
                {
                    
                    Response.Write("<script language='javascript'>alert('登陆已超时,请重新登陆!');window.parent.location='default.aspx';</script>");
                    return;
                }
    这句应该在 ispostback 外面 并且要在ispostback前面
    不管你是不是postback都得判断用户是否登录。
    登录页面不要做这一判断,因为你要登录,否则你永远登录不了
      

  3.   


    我前面没说清楚,我在登陆页面没有加这些代码,另外我也试着把ispostback判断删除试了,也同样没有用。
      

  4.   

     //是否已经登陆
            if (!IsPostBack)
    这个本身就不对,不管是不是回发,都要判断,不过影响不大,你跟踪下 看先session的值是不是有问题?
      

  5.   

      if (Session["login"] == null)
                {
                    
                    Response.Write("<script language='javascript'>alert('登陆已超时,请重新登陆!');window.parent.location='default.aspx';</script>");
                    return;
                }
    不知道你的这段代码是在什么位置,应该是在点击登录按钮的时候首先执行了这段代码,按照一般登录页面的方法,这段代码没必要放在登陆页,因为登录页面没有任何权限操作,只是判断用户名和密码是否正确,正确之后跳转到合适的页面,这段直接删掉就行
      

  6.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" />将头部换掉
      

  7.   

    有一种猜测就是你在登陆页面成功后. 木有给Session["login"]木有存入值.
      

  8.   


    谢谢大家的回复,不过大家都没看看仔细我的话,我可以在火狐下测试正常,当然肯定对Session进行了赋值,另外我肯定也没有在登陆页面判断有没有登陆的,那些验证的代码都是放在登陆后的页面。