在一个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地址栏里输入刚才访问过的一个页面,还是能显示出数据,手动刷新一次才转回了登陆页面。
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 =""的页面都是不相同的),不会从本地客户端缓存读取页面,而是从服务器读取页面。