2013-12-11 54 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功能確保用戶不再登錄,這就是爲什麼我已經鏈接它。 –