我有一个会话过期方法,使用cookie倒计时20分钟后退出用户。用户成功登出后,它工作正常。唯一的问题是显示为
后的URLlocalhost:8091 /登录?ReturnUrl =%2FLogin%2FLogOut
在/登录后不应该有任何东西。我正在使用C#和ASP.NET 4和MVC。
这是用于重定向用户的JS ......
function startCountdown(timeLeft) {
if (countDownInterval > 0) return;
$('#idletimeoutcount').text(countDown);
$('#idletimeout').slideDown();
countDown = parseInt(timeLeft / 1000);
countDownInterval = setInterval(function() {
$('#idletimeoutcount').text(countDown);
var secondsLeft = countDown--;
document.title = "Warning! " + secondsLeft + " seconds left until logged out";
if (countDown <= 0) {
// console.log('finished');
window.location.href = '/Login/LogOut';
}
}, 1000);
}
LogOut功能:
public ActionResult LogOut()
{
FormsAuthentication.SignOut();
return RedirectToAction("Index", "Login");
}
有没有办法让它如此网址是localhost:8091 /登录? (由于堆栈溢出而取出HTTP)
这可能与包含这些标记的网络配置有关:
<authentication mode="Forms">
<forms name="SqlAuthCookie" loginUrl="Login" timeout="20" slidingExpiration="true" />
</authentication>
答案 0 :(得分:0)
您无法删除url的ReturnUrl参数是表单身份验证的工作方式,请查看此帖子。 How to remove returnurl from url?
在WebForms中,我使用此代码执行签出机制:
FormsAuthentication.SignOut();
Session.Abandon();
FormsAuthentication.RedirectToLoginPage();
答案 1 :(得分:0)
FormsAuthentication用于处理登录过期。为什么不放手呢?您已经拥有参数集:
timeout="20"
一旦时间到期,您的javascript是否只是重定向到登录页面。
答案 2 :(得分:0)
我遇到的最佳解决方案是通过执行以下操作来删除返回的URL:
if (!string.IsNullOrEmpty(Request.QueryString["returnUrl"]))
{
return RedirectToAction("Index", "Login");
}
检查是否添加了returnURL,如果是,则会将您引导至登录页面。它是苦涩的,因为它解决了我的错误,但现在用户没有获得能够回到他们在会话到期之前所在的页面的经验。