2013-12-11 87 views
0

我有一个会话过期方法,可以在用户从cookie中倒数20分钟后注销用户。它可以正常工作,因为用户成功注销。唯一的问题是后出现的URL为会话到期URL错误

本地主机: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); 
     } 

而注销功能:

public ActionResult LogOut() 
    { 
     FormsAuthentication.SignOut(); 
     return RedirectToAction("Index", "Login"); 
    } 

有没有什么办法让它如此的网址为localhost:8091 /登录 ? (HTTP取出,因为堆栈溢出)

它可能是与包含这些标签的web配置:

  <authentication mode="Forms"> 
    <forms name="SqlAuthCookie" loginUrl="Login" timeout="20" slidingExpiration="true" /> 
</authentication> 
+0

当新用户点击本地主机时会发生什么:8091/Login?它会自动添加ReturnUrl吗? –

+0

奇怪的是,如果我运行window.location.href ='/ Login/LogOut';在Chrome的控制台上,它出现了localhost:8091/Login。但是当我等待超时20分钟时,它会以localhost:8091/Login?ReturnUrl =%2FLogin%2FLogOut的形式出现。无论哪种方式,您都会返回到登录页面,但如果此网址出现,并且您尝试重新登录,则必须单击登录两次,因为在首次单击后,网址会返回到/登录。 –

+0

不知道这是否有帮助,但你可以尝试改变: loginUrl =“登录” 到 loginUrl =“/登录” –

回答

0

我碰到解决的bug最好的解决办法是通过执行以下操作进行剥离返回URL:

 if (!string.IsNullOrEmpty(Request.QueryString["returnUrl"])) 
     { 
      return RedirectToAction("Index", "Login"); 
     } 

此检查,如果他们是一个RETURNURL添加如果这样它会引导您登录页。它非常甜蜜,因为它解决了我的错误,但现在用户没有能够回到他们在会话过期之前所处的页面的体验。

0

无法删除该URL的RETURNURL参数的方式窗体身份验证工作检查这个帖子。 How to remove returnurl from url?

在的WebForms我用这个代码来执行退出机制:

FormsAuthentication.SignOut(); 
Session.Abandon(); 
FormsAuthentication.RedirectToLoginPage(); 
0

FormsAuthentication是建立在处理登录到期。为什么不放过它?你已经拥有的参数设置:

timeout="20"

你有你的JavaScript只是重新到登录页面,一旦时间到期。

+0

我确实尝试过,可悲的是它没有让我注销,因为我拥有它,所以如果你已经登录并且正在尝试访问登录页面,你将被重定向到主页(你只能访问如果登录)我的控制器中的LogOut功能确保用户不再登录,这就是为什么我已经链接它。 –