我在菜单中添加了一个“退出”按钮(LinkButton),按钮的Click事件代码如下: //点击退出清空用户Session
protected void lbtmExit_Click(object sender, EventArgs e)
{
this.Session["UserID"] = "";
Response.Redirect("Index.aspx");
Response.End(); ;
}
这个清空Session的代码是放在用户控件代码中的(因为LinkButton在用户控件里),代码没什么问题。问题出现在点击“退出”之后。清空后跳转到Index.aspx了,但再点击浏览器的“后退”,有几个之前浏览的页面能验证出用户未登录,有几个页面未重新加载,没执行验证……显示的之前登录的用户的信息。(这几个测试了的页面都是退出前最后浏览的页面)仔细比较了这几个页面的差异,设置断点单步之后,发现唯一的区别是,验证成功的页面重新加载了,验证失败的页面没有重新加载。尝试了用if (!IsPostBack)判断再验证,也检查过页面的设置差异,没解决。想请教一下大家怎么解决。
protected void lbtmExit_Click(object sender, EventArgs e)
{
this.Session["UserID"] = "";
Response.Redirect("Index.aspx");
Response.End(); ;
}
这个清空Session的代码是放在用户控件代码中的(因为LinkButton在用户控件里),代码没什么问题。问题出现在点击“退出”之后。清空后跳转到Index.aspx了,但再点击浏览器的“后退”,有几个之前浏览的页面能验证出用户未登录,有几个页面未重新加载,没执行验证……显示的之前登录的用户的信息。(这几个测试了的页面都是退出前最后浏览的页面)仔细比较了这几个页面的差异,设置断点单步之后,发现唯一的区别是,验证成功的页面重新加载了,验证失败的页面没有重新加载。尝试了用if (!IsPostBack)判断再验证,也检查过页面的设置差异,没解决。想请教一下大家怎么解决。
Session["UserID"]=null;
Response.Redirect("Index.aspx");
Response.End(); ;每一个页面加判断if(!page.IsPostBack)
{
if(Session["UserID"]!=null && Session["UserID"].ToString()!="")
{
//登录成功
}
else
{
//还没有登录
}
}
response.setHeader("Cache-Control","no-store");
response.setDateHeader("Expires", 0);
response.setHeader("Pragma","no-cache");
%>
Response.Buffer = true;
Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1);
Response.AddHeader("pragma", "no-cache");
Response.CacheControl = "no-cache"; 这样每次访问这样的页面都会到服务器端进行重新获取了
<% @outputcache duration="5" varyByParam="none" %>
Response.Buffer = true;
Response.ExpiresAbsolute = DateTime.Now.AddSeconds(-1);
Response.AddHeader("pragma", "no-cache");
Response.CacheControl = "no-cache"; 这样每次访问这样的页面都会到服务器端进行重新获取了
是这样的,我觉得session真是不好
容易丢失
<% @outputcache duration="5" varyByParam="none" %>这个怎么用?
改成Session.Remove("UserID");
Session.Clear();Session.RemoveAll();Session.Remove("username");
//写全点,浏览器的后退很麻烦
//你有不知道他后退的是那个页面不能所有的都加上
<%
Response.Expires = 0
Response.Expiresabsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"
% >
//你在退出的时候添加一个alert(你已经推出了页面)然后跳转
这样后退就退到了alert里面了
http://topic.csdn.net/u/20081031/14/ec410b99-c659-4a27-8ad9-fc0e5d6c7c2b.html
Response.Buffer = true;
// Response.ExpiresAbsolute = Now() - 1;
Response.Expires = 0;
Response.CacheControl = "no-cache";
%>
Response.Write("<script Language=Javascript>window.top.location=\"Index.aspx\";</script>");
那用那么费劲......
真晕 楼上那些骗分的.2行代码的东西..
后来在IIS上测试,发现隔几分钟Session就过期了,得重新登录。
最后找到了一个比较好的解决办法,而且不用关掉页面缓存:Session.Abandon();
Response.Write("<script>window.location.href='Login.aspx'</script>");
就是把Response.Redirect改为Response.Write,输出脚本,实现跳转。http://blog.csdn.net/lhypang2006/archive/2008/03/11/2170751.aspx
http://www.jb51.net/article/17722.htm