日期:2014-05-20  浏览次数:20391 次

一个奇怪的问题,大家帮忙解决下
我是个菜鸟,用asp.net写了一个简单的登陆功能,大概是这样

default.aspx是登陆页面

登陆成功跳转到main.html页面,此页面用的是框架结构,含三个.aspx页面。

我在每个页面都有判断是否登陆超时的代码,代码如下

C# code
    
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('登陆已超时,请重新登陆!');但在火狐下测试正常,请问怎么解决?

另外想请教下,有没有更好的实现方法?



------解决方案--------------------
if (Session["login"] == null)
{

Response.Write("<script language='javascript'>alert('登陆已超时,请重新登陆!');window.parent.location='default.aspx';</script>");
return;
}
这句应该在 ispostback 外面 并且要在ispostback前面
不管你是不是postback都得判断用户是否登录。
登录页面不要做这一判断,因为你要登录,否则你永远登录不了
------解决方案--------------------
//是否已经登陆
if (!IsPostBack)
这个本身就不对,不管是不是回发,都要判断,不过影响不大,你跟踪下 看先session的值是不是有问题?
------解决方案--------------------
if (Session["login"] == null)
{

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