如何实际从网站注销而不是简单地重定向到登录页面?

时间:2014-11-15 07:16:27

标签: c# asp.net

我正在使用response.redirect工具将用户发送回登录页面,当他点击退出图片按钮但实际上并没有执行注销操作,当用户点击键盘上的退格按钮或浏览器中的后退按钮时屏幕显示回来。如何在c#asp.net中控制这种情况,我已经阅读了一些帖子说会话应该在重定向之前清除,但我不知道如何在我的表单中应用它。我已经附上了下面的编码,我要求有人以明确的方式帮助我摆脱这种情况。

在Loginpage.aspx中

protected void btnLogin_Click1(object sender, EventArgs e)
{
var query = (from row in db.Logins where row.Userid == txtUname.Text && row.Password == txtPassword.Text select new { row.Userid, row.Password, row.Admin_Roll, row.Manager_Roll}).Distinct();
if (query.Count() > 0)
{
if (query.Single().Admin_Roll == 1)
{
Response.Redirect("~/HomePage.aspx");
}
else if (query.Single().Manager_Roll == 1)
{
Response.Redirect("~/DetailsPage.aspx");
}

和Masperpage.master

protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
Response.Redirect("~/LoginPage.aspx");
}

建议我解决一些问题。

6 个答案:

答案 0 :(得分:2)

您必须使用C#代码clear来自浏览器的所有会话和Cookie。

  • LogoutPage.aspx

`

protected void Page_Load(object sender, EventArgs e)
        {
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
            Response.Cache.SetNoStore();
            Session.Abandon();
            Session.Clear();
            System.Web.Security.FormsAuthentication.SignOut();    
            // DO NOT REDIRECT TO LOGIN PAGE FROM HERE
            // REDIRECT TO LOGIN PAGE FROM JAVASCRIPT

        }

`

  

以及在页面加载时使用javascript清除浏览器History的方式相同

`

<script type="text/javascript">
    $(document).ready(function () {            
        var url = window.location.href;
        window.history.go(-window.history.length);
        window.location.href = 'Login.aspx'; // REDIRECT TO LOGIN PAGE
    });

</script>

`

更新答案: 最好将注销的不同页面设为Logout.aspx,并在Page_Load Logout.aspx页的<Head>事件中编写此代码。并在Logout.aspx页面的{{1}}标记中写上javascript。

答案 1 :(得分:1)

使用表单身份验证时,您可以主动将此人签名。

protected void Page_Load(object sender, EventArgs e) 
      {
         // The SignOut method invalidates the authentication cookie.
         FormsAuthentication.SignOut();
         Response.Redirect("Login.aspx");
      }

参见Microsoft参考:http://msdn.microsoft.com/en-us/library/aa288576(v=vs.71).aspx

答案 2 :(得分:1)

有几种方法

使用Session清除Session.Abandon并使用Response.Redirect("~/LoginPage.aspx");

然后您可以使用以下方法清除缓存或清除历史记录

使用Codebehind

// Code disables caching by browser.
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();

使用JavaScript

<SCRIPT LANGUAGE="javascript">
function ClearHistory()
{
     var backlen = history.length;
     history.go(-backlen);
     window.location.href = loggedOutPageUrl
}
</SCRIPT>

使用asp.net

没有更新面板

Page.ClientScript.RegisterStartupScript(this.GetType(),
Guid.NewGuid().ToString(),"ClearHistory();",true);

更新面板

ScriptManager.RegisterStartupScript(this,this.GetType(),
Guid.NewGuid().ToString(),"ClearHistory();",true);

答案 3 :(得分:1)

您应该实施Forms Authentication

然后您可以使用SignOut方法,如下所示: -

FormsAuthentication.SignOut();
Response.Redirect("~/LoginPage.aspx");

修改

表单身份验证用于Internet Web应用程序。如果您想验证不仅仅是域的一部分用户(如在Windows身份验证中),那么对于Web应用程序,您应该使用表单身份验证。这可以通过在web.config文件中添加身份验证模式Forms来启用,如下所示: -

<authentication mode="Forms">
   <forms loginUrl="Login.aspx" timeout="50" 
          defaultUrl="Default.aspx" protection="All">
  </forms>
</authentication>

您需要在MSDN上详细了解相关内容。

答案 4 :(得分:1)

我认为你的后退按钮有问题,下面的代码会在用户注销时禁用后退按钮。

 private void Page_Load(object sender, EventArgs e)
 {
Response.Buffer= true;
Response.ExpiresAbsolute=DateTime.Now.AddDays(-1d);
Response.Expires =-1500;
Response.CacheControl = "no-cache";
if(Session["SessionId"] == null)
{
Response.Redirect ("Loginpage.aspx");
 }
}
}

答案 5 :(得分:1)

你也可以放弃他们的会话,只需添加Session.Abandon(),虽然表格注销似乎是一个更强大的答案。

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
    Session.Abandon();
   Response.Redirect("~/LoginPage.aspx");
   }