[英]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.