有个问题请教一下大家,
在asp.net中,当登录一个页面进去后台后,点击注销后返回到登录页面,我是用Session来作判断的,在注销时我已经把Session清空了,但我按浏览器的“后退”按钮却可以返回到后台,请问这个问题怎么解决?

解决方案 »

  1.   

    在页面中加入如下代码
    protected void Page_Load(object sender, EventArgs e)
            {
                Response.CacheControl = "No-cache";//清楚缓存代码
                if (Session["master_id"] == null)
                {
                    Response.Write(" <script> alert( '未登陆,或登陆超时! ');location.href='/Login.aspx'</script> ");
                }
            }
      

  2.   

    清除缓存都还不行,
    我在加载页面时进行了以下操作:
    protected void Page_Load(object sender, EventArgs e) 
            {             Response.Buffer = true;
                Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
                Response.Expires = 0;
                Response.CacheControl = "no-cache";
                Response.AddHeader("Pragma", "No-Cache");            Response.Cache.SetNoStore();
             }在注销按钮上加了
    Session.Abandon();
    Session.Clear();
    Session.RemoveAll();
    Response.Redirect("Default.aspx");确保Seeion被清除了
      

  3.   

    楼主你的代码没有判断session是否为空啊,判断下如果为空就转到default页面。
      

  4.   

    不只后台程序加 禁止缓存的代码 html 代码也要加。
    <META HTTP-EQUIV="pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
    <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
    <META HTTP-EQUIV="expires" CONTENT="0">
      

  5.   

    6楼的朋友所说的,我肯定已经加了判断啦~
    关键不是在这里,当点击浏览器的后退按钮时,它根本就不会进入 Page_Load 事件
    它只是缓存,现在关键是要怎么把缓存禁止吧
    7楼所说的,我前后台每个页面我都加上了,却始终还是这样
    刚发现连这个CSDN也是,注销后还是可以后退的
    难道真的没有解决的办法吗?
      

  6.   

    用js,注销后,replace掉location里驻留的地址为一个新地址即可。
      

  7.   

    你可以先建一个空白的aspx页面,也就是exit.aspx页面,在这个页面你把session值,cookie值清空一下,然后在再这个页面返回首页或登陆页面。具体如下:
    <a href="exit.aspx" target="_parent">退出</a>
    然后在exit.aspx页面后台page_load里面这样写:
       protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                Session.Clear();//session值清空.
                HttpCookie cookie = new HttpCookie("zljk_user", null);//下面的是把cookie值清空就可以了
                cookie.Expires = DateTime.Now.AddYears(-1);
                Response.Cookies.Add(cookie);
                Response.Write("<script>window.location.href='index.aspx'</script>");//返回首页.
            }
        }通过以上的就可以了...
      

  8.   

    后台登录时你可以用forms验证,也可以自己写验证判断Session值存在与否,不存在则跳转到登录页面
    如果用Forms验证,返回时不可能返回到后台
    如果自己写验证的话,返回时可以返回到后台,但是如果后台的所有页面都验证了的话即使能返回也没有用,你点击任何一个连接都会又跳转到登录页面,所以这个不用担心注销时用11楼的方法就可以
      

  9.   

    谢谢大家的热心解答~
    问题终于解决了~
    只要在客户端禁止缓存:
    <META HTTP-EQUIV="pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
    <META HTTP-EQUIV="expires" CONTENT="0">
    在注销清空session后,用以下方法做跳转:
    Response.Write("<script>window.location='Default.aspx'</script>");