欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net 退出登陆(解决退出后点击浏览器后退问题仍然可回到页面问题)

程序员文章站 2024-03-11 21:19:07
复制代码 代码如下: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");
}