为了安全考虑,在直接输入url时候,先判断session("id")是否有值,不然就跳转到其他页面。
正常登陆,到了第二个页面以后,可以选择logout,这个时候执行session.removeall的操作,然后返回
登陆画面,窗口并不关闭。这个时候直接输入刚才那个第二个页面地址,本来应该转向到登陆画面,却可以直接访问了,有没有什么方法解决这个问题?

解决方案 »

  1.   

    你的意思是说,执行执行session.removeall后Session("id")!=null了吗?不可能阿
      

  2.   

    很可能是浏览器缓存的问题http://www.cnblogs.com/wssmax/archive/2004/11/30/70939.html
      

  3.   

    Session清楚成功了??
    多半是缓存的缘故.
    ---------
    为了安全考虑,在直接输入url时候,先判断session("id")是否有值,不然就跳转到其他页面。
    正常登陆,到了第二个页面以后,可以选择logout,这个时候执行session.removeall的操作,然后返回
    登陆画面,窗口并不关闭。这个时候直接输入刚才那个第二个页面地址,本来应该转向到登陆画面,却可以直接访问了,此事,你刷新本页,看看可以访问吗?若可以那说明session没有清空,若不可以,那说明已经OK了,只是暂时的缓存,不会有安全隐患的.
      

  4.   

    可能是浏览器缓存问题判断的时候还应该if (Session("id")!=null && Session("id")!="")
      

  5.   

    退出的页面,代码可以这样:
                               Session.Clear();
    Session.Abandon();
    Response.Clear();
    Response.Buffer=true;
    Response.Expires=0;
    Response.ExpiresAbsolute= DateTime.Now.AddDays(-1);
    Response.AddHeader("pragma","no-cache");
    Response.AddHeader("cache-control","private");
    Response.CacheControl="no-cache";
      

  6.   

    谢谢各位了,是缓存的问题。
    foxconn_nich() 的方法没成功。不知道为什么。
    我在头里加了<META http-equiv="Pragma" content="no-cache">之后没有问题了。
      

  7.   

    还不知道你用的是不是C#,如果是的话,在其它所有页面,可以继承一个基类,基类用于判断是否登录:
    protected override void OnInit(EventArgs e)
    {

    if (Session["id"]== null)
    {
    Response.Write(string.Format("<script>top.window.location.href='Admin/login.aspx';</script>",));
    } }
      

  8.   

    <META http-equiv="Pragma" content="no-cache">