好吧,这正是我担心的。我在网上看到了类似的答案,希望有人能够找到解决方法。虽然感谢您的时间,但我想我可以使用JavaScript来防止后退按钮,就像history.back()一样。
document.execCommand('ClearAuthenticationCache');
'并不适用于所有人:
1)它会刷新所有凭证,这意味着用户将无法访问他当前已经登录的任何网站,例如Gmail或其他网站
2)它仅适用于IE ;)response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();
response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();
另一件需要做的事情是告诉浏览器不要缓存页面:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();
所有这些都准备就绪后,它在IE中可以正常工作(对我来说),但是到目前为止,我仍然无法防止Firefox在用户首次按下Esc(隐藏基本登录对话框)然后刷新(F5)或浏览器的后退按钮时自动登录用户。
Session.Abandon
方法会销毁Session对象中存储的所有对象并释放它们的资源。如果您没有显式地调用Abandon方法,则服务器会在会话超时时销毁这些对象。
这是一个解决方案,适用于IE6及更高版本。
<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>
<script>
function logout()
{
document.execCommand("ClearAuthenticationCache",false);
}
</script>
从http://msdn.microsoft.com/en-us/library/bb250510%28VS.85%29.aspx发现了这个。
网页团队简介 请提供您的凭据
问:Jerry B. 写道:“在用户验证并处理请求之后,我现在想要使他无效。假设该计算机处于任何人都可以走近并使用它的开放环境中,我希望每次用户访问Web上的特定模块时都能抛出一个新挑战。”
答:这是Internet Explorer团队经常请求的功能,在那里的优秀人员已经给我们提供了一种在Internet Explorer 6.0 SP1中实现它的方法。你需要做的就是在文档上调用execCommand方法,将ClearAuthenticationCache作为命令参数传递进去,像这样:
document.execCommand("ClearAuthenticationCache");
此命令清除缓存中的所有凭据,因此如果用户请求需要身份验证的资源,则会再次提示进行身份验证。
我将其放在我的注销链接按钮上,在IE6 sp1及更高版本中运行良好:
OnClientClick="document.execCommand('ClearAuthenticationCache');"
你尝试过在按钮点击的响应中调用Session.Abandon吗?
编辑:
这似乎是一个经典的后退按钮问题。
关于后退按钮,你几乎无能为力。想象一下用户刚刚在新窗口中打开了当前页面,然后点击了logOut按钮,该页面似乎已经注销了,但它不会立即影响到其他窗口的内容。
只有当他们尝试在那个窗口中导航到某个地方时,才会发现他们的会话已经消失了。
许多浏览器以类似(虽然不完全相同)的方式实现后退按钮。从HTML/HTTP的角度来看,返回到上一页并不一定是一次导航。