在一个linkButton的单击事件中,我编写了注销当前用户的功能,如下所示:(框架中的一个子页面有这个控件) protected void LinkButtonLogout_Click(object sender, EventArgs e) { this.Session.Clear(); this.Session.Abandon(); Response.Write(" <script language='javascript'>window.parent.location='../login.aspx'; </script>"); //让父框架转到登陆页面。 } 可是,之后我在当前的IE地址栏里输入刚才访问过的一个页面,还是能显示出数据,手动刷新一次才转回了登陆页面。
原因:这个不是
session
的问题,应该是
IE
缓存造成的现象。就是说你再次访问页面之后,并没有访问服务器,而是访问的本地缓存页面。
使
Session.Clear()
和
Session.Abandon()
立即生效的解决方案:
<META http-equiv="Pragma" content="no-cache">
取消客户端缓存。
如果页面用
abc.aspx?id =""
查询字符串的形式访问浏览器,则会认定是不同的页面(
abc.aspx
页面及
id
不同的形如
abc.aspx?id =""
的页面都是不相同的),不会从本地客户端缓存读取页面,而是从服务器读取页面。