Отображать сообщение пользователю, когда истекает срок действия сеанса проверки подлинности с помощью форм

Это кажется простым, и я помню, как делал это пару лет назад.

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

Что-то вроде «Вы слишком долго бездействовали, поэтому вам необходимо снова войти в систему».

Это должно быть легко, я просто упираюсь в стену. Я думал о том, чтобы получить оригинальный билет и прочитать дату истечения срока действия, но я немного потерялся.

Любые идеи?

Брент


person Brent Pabst    schedule 21.10.2010    source источник


Ответы (4)


Попробуйте этот JavaScript для размера:

Убедитесь, что в исходном коде существует свойство с именем LoginPageUrl. Отлично подходит для мастер-страниц.

Если вы хотите зарегистрировать скрипт из кода программной части, вы можете даже получить время ожидания сеанса из приложения и внедрить его, чтобы у вас все еще было только одно место (web.config) для его обновления.

Чтобы отобразить сообщение пользователю после перенаправления его на страницу входа (.NET позаботится об истечении срока действия файла cookie), отправьте параметр строки запроса, который ищет страница входа, и показывает сообщение, указывающее, что пользователь вышел из системы из-за бездействие.

<head>
...
</head>
<body onload="logoutOnExpire();" >
<script type="text/javascript">
        // ACTIVITIES TO RUN FOR THE PAGE
        function logoutOnExpire() {
            clearTimeout(logoutTimeout);
            logoutTimeout =
               setTimeout('location.href = '<%= LoginPageUrl %>';', 1200000);
               // 20 minutes
        }
</script>
<form id="form" runat="server">
...
</form>
</body>
</html>
person Brad    schedule 21.10.2010
comment
Я не хочу предупреждать пользователя, что он вот-вот выйдет из системы... Меня это раздражает, если я отойду на 20 минут, конечно, я должен выйти из системы. Кроме того, мне не нужно перенаправлять пользователя, .NET делает это за меня. Я хочу сказать пользователю, ПОЧЕМУ, когда он пытается щелкнуть что-то еще, его отправляют обратно на страницу входа. Логика, которую я ищу или вспоминаю, говорит с билетом проверки подлинности форм в коде программной части для страницы входа и позволяет мне тогда показать ошибку. - person Brent Pabst; 22.10.2010
comment
@Brent, да, .NET сделает это за вас, однако не сделает этого до другой обратной передачи (управляющего события). Я думал, ты хочешь что-то автоматическое. Если вы используете этот JavaScript, вы можете передать параметр строки запроса, который ищет страница входа, который указывает, что вы были перенаправлены сюда из-за бездействия. - person Brad; 22.10.2010
comment
спасибо, нет, мне не нужно, чтобы это было автоматически. Событие onPostback в порядке. Уменьшает объем кода, который мне приходится писать и управлять, если я просто использую встроенные методы. Разве это не имеет смысла? - person Brent Pabst; 25.10.2010
comment
@ Брент, все зависит от опыта пользователя. Посмотрите на второй ответ, который я опубликовал о перенаправлении при обратной передаче, если пользователь не прошел проверку подлинности. - person Brad; 25.10.2010
comment
Ну, я никогда не находил то, что я помню, делал раньше, мне придется продолжать поиск, но в противном случае это лучший ответ. Спасибо - person Brent Pabst; 26.10.2010

Вы можете проверить сеанс на внутренней странице, и если сеанс не существует, перенаправить на страницу входа с некоторым значением в строке запроса, чтобы понять, с какой страницы пришел этот вызов. Когда пользователь снова вошел в систему, вы можете использовать значение строки запроса, чтобы определить, какой страница для отображения назад.

MyPage.aspx.cs, при загрузке страницы вы можете проверить,

if(Session["user"]==null)
{
  Response.Redirect("Login.aspx?from=mypage");
}
else
{
  // Do the other stuff for the loged in user
} 

И в Login.aspx.cs, в коде, где вы проверяете свои данные для входа в форму

string userName=txtUserName.Text; 
string password=txtPass.Text;
if(IsValidLogin(userName,password)
{
  string toUrl="defaul.aspx";
  if(Request.QueryString["from"]!=null)
  {
   string fromPage=Request.QueryString["from"];
    if(fromPage=="mypage")
    {
       toUrl="mypage.aspx";
    }
    else if(fromPage=="review")
    {
       toUrl="review.aspx";
    }
  }
  Response.Redirect(toUrl);
}
person Shyju    schedule 21.10.2010
comment
Вся идея заключалась в том, чтобы не переопределять поведение .NET по умолчанию, отправляя пользователя обратно на страницу входа. Как понять, что сеанс завершился один раз на странице входа без необходимости передавать строку запроса. Я делал это раньше! - person Brent Pabst; 22.10.2010

Если вы хотите отправить пользователя на страницу, отличную от страницы входа, когда они вызывают обратную передачу сервера после истечения срока их сеанса, используйте следующий код в верхней части события Page_Load (это может не работать, если .NET выполняет перенаправление первый).

if(!Context.User.Identity.IsAuthenticated)
{
    Response.Redirect("~/OtherPage.aspx", false);
}

Если вы создаете базовую страницу на своем веб-сайте, от которой наследуют все страницы, добавьте ее в Page_Load этой страницы.

person Brad    schedule 22.10.2010

Если вы перенаправлены на страницу входа по умолчанию после попытки использовать страницу после истечения времени сеанса, параметр redirecturl не установлен на страницу, к которой вы пытались получить доступ.

Таким образом, вы можете сделать вывод, что, если это установлено, они ранее были на странице, а затем представить свое сообщение о том, что они вышли из системы из-за похода на обед и т. д.

person MattC    schedule 25.10.2010