有个问题请教一下大家,
在asp.net中,当登录一个页面进去后台后,点击注销后返回到登录页面,我是用Session来作判断的,在注销时我已经把Session清空了,但我按浏览器的“后退”按钮却可以返回到后台,请问这个问题怎么解决?
在asp.net中,当登录一个页面进去后台后,点击注销后返回到登录页面,我是用Session来作判断的,在注销时我已经把Session清空了,但我按浏览器的“后退”按钮却可以返回到后台,请问这个问题怎么解决?
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> ");
}
}
我在加载页面时进行了以下操作:
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被清除了
<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">
关键不是在这里,当点击浏览器的后退按钮时,它根本就不会进入 Page_Load 事件
它只是缓存,现在关键是要怎么把缓存禁止吧
7楼所说的,我前后台每个页面我都加上了,却始终还是这样
刚发现连这个CSDN也是,注销后还是可以后退的
难道真的没有解决的办法吗?
<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>");//返回首页.
}
}通过以上的就可以了...
如果用Forms验证,返回时不可能返回到后台
如果自己写验证的话,返回时可以返回到后台,但是如果后台的所有页面都验证了的话即使能返回也没有用,你点击任何一个连接都会又跳转到登录页面,所以这个不用担心注销时用11楼的方法就可以
问题终于解决了~
只要在客户端禁止缓存:
<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>");