asp.net 退出登陆(解决退出后点击浏览器后退问题仍然可回到页面问题)
程序员文章站
2024-03-09 16:21:47
复制代码 代码如下:session.abandon(); response.redirect("login.aspx"); 但是这样点点击浏览器的后退仍然可以回到刚才的页面...
复制代码 代码如下:
session.abandon();
response.redirect("login.aspx");
但是这样点点击浏览器的后退仍然可以回到刚才的页面,这可不行,在网上找了一下,也有不少人遇到这样的问题,试了一些方法,都不管用。不过最后还是找到,共享一下。
http://blog.csdn.net/lhypang2006/archive/2008/03/11/2170751.aspx
复制代码 代码如下:
session.abandon();
response.write("<script>window.location.href='login.aspx'</script>");
很简单,就是把response.redirect改为response.write,输出脚本,实现跳转。
再共享一个,也是关于退出的。
妙用asp.net中的httphandler
上面的方法我觉得很好,写一个类继承ihttphandler
复制代码 代码如下:
public class logouthttphandler : ihttphandler
{
/// <summary>
/// 通过实现 ihttphandler 接口的自定义 httphandler 启用 http web 请求的处理。
/// </summary>
/// <param name="context">httpcontext 对象,它提供对用于为 http 请求提供服务的内部服务器对象(如 request、response、session 和 server)的引用。 </param>
public void processrequest (httpcontext context)
{
formsauthentication.signout();
context.response.redirect("login.aspx",true);
}
再修改web.config,在<system.web></system.web>中增加如下脚本:
复制代码 代码如下:
<httphandlers>
<add verb="get" path="logout.aspx" type="logouthttphandler" />
</httphandlers>
文章中把类编译成了dll,也可以只在app_code中添加这样的类就好了。
还有上面的processrequest 并没有清除session。而且也是用response.redirect,点击后退也是可以回到原来的页面的。我改了一下
复制代码 代码如下:
public class logouthttphandler : ihttphandler, irequiressessionstate
{
public void processrequest(httpcontext context)
{
//formsauthentication.signout();//这样可以不用
context.session.abandon();
context.response.write("<script>window.location.href='login.aspx'</script>");
}
}
这样不用再加一个页面logout.aspx,退出的代码也简单。
复制代码 代码如下:
protected void exit_click(object sender, eventargs e)
{
response.redirect("logout.aspx");
}