2013-12-11 5 views
0

У меня есть способ истечения срока действия сеанса, который выводит пользователя через 20 минут, используя обратный отсчет из файла cookie. Он отлично работает, так как пользователь успешно выходит из системы. Единственная проблема после того, как появится 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); 
     } 

И функция LogOut:

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

Есть ли способ сделать это так, URL является локальный: 8091/Авторизоваться ? (HTTP вынимают из-за переполнения стека)

Это может быть что-то делать с веб-конфигурации, который содержит эти теги:

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

Что происходит, когда свежий пользователь попадает на localhost: 8091/Войти? Он автоматически добавляет ReturnUrl? –

+0

Странно, если я запустил window.location.href = '/ Login/LogOut'; в консоли на Chrome он выходит с localhost: 8091/Логин. Но когда я жду 20 минут для таймаута, он приходит как localhost: 8091/Login? ReturnUrl =% 2FLogin% 2FLogOut. В любом случае вы вернетесь на страницу входа в систему, но если этот URL-адрес появится и вы попытаетесь войти в систему, вам нужно дважды войти в систему дважды, когда URL-адрес вернется в/Логин после первого щелчка. –

+0

Не уверен, что это поможет, но вы можете попробовать: loginUrl = "Login" to loginUrl = "/ Login" –

ответ

0

Лучшее решение, которое я наткнулся, чтобы решить эту ошибку лишает обратный URL путем выполнения следующих:

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

Проверяется, если их это ReturnUrl добавил, и если так он направит вас к логину стр. Он горько-сладкий, поскольку он решает мою ошибку, но теперь пользователь не получает опыта в том, чтобы вернуться к странице, на которой они были, до истечения срока их сеанса.

0

Вы не можете удалить параметр ReturnUrl для URL является способом проверки подлинности форм работы проверьте этот пост. How to remove returnurl from url?

В WebForms я использовал этот код для выполнения выписался механизм:

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

FormsAuthentication построен для обработки истечения входа. Почему бы не позволить? У вас уже есть набор параметров:

timeout="20"

Есть ли у вас ваш Javascript просто перенаправить на страницу входа в систему, как только истечет время.

+0

Я пробовал это. К сожалению, он не позволял мне выйти из системы, и, как я понял, если вы вошли в систему и пытаетесь открыть страницу входа в систему, вы будете перенаправлены на домашнюю страницу (к которой вы можете получить доступ если вошел в систему). Функция LogOut в моем контроллере - это то, что гарантирует, что пользователь больше не входит в систему, поэтому я связал его. –

Смежные вопросы