繁体   English   中英

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

[英]How to actually logout from a website rather than simply redirecting to login page?

我正在使用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");
}

建议我一些解决方案。

对于您,您必须使用C#代码从浏览器中clear所有会话和Cookie。

  • 注销页面

`

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并在Logout.aspx页面的Page_Load事件中编写此代码。 并在Logout.aspx页面的<Head>标记中编写以上javascript。

使用表单身份验证时,您可以主动注销此人。

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/zh-cn/library/aa288576(v=vs.71).aspx

有几种方法

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

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

使用代码隐藏

// 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);

您应该实现表单身份验证

然后,您可以使用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上详细阅读此内容。

我认为您在使用后退按钮时遇到了问题,在用户注销后,以下代码会导致后退按钮失效。

 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");
 }
}
}

您也可以放弃他们的会话,只需添加Session.Abandon(),尽管表单签出似乎是一个更可靠的答案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM