Расширение тайм-аута аутентификации форм при создании вызовов AJAX с помощью jQuery

Я хочу переписать довольно интенсивную страницу ASP.NET типа CRUD для использования вызовов ajax (в частности, jQuery ajax). Моя забота в этом состоит в том, что пользователь может находиться на этой странице дольше, чем время ожидания проверки подлинности форм. Из-за этого я думаю, что я должен расширять бланки проверки подлинности форм при каждом вызове ajax (в основном, как это делается в обычной модели отправки веб-форм). Итак, вопросы:

Это даже актуальная проблема? Если это так, возможно ли написать плагин jQuery для расширения тайм-аута проверки подлинности форм? Уже существует ли это? Использует ли ASP.NET AJAX лучший подход?

Любые комментарии \help будут оценены.

Ответ 1

Я могу подтвердить, что вызов веб-службы или метода страницы через jQuery будет продлевать истечение сеанса ASP.NET таким же образом, что и обычная обратная передача.

Я часто использую пятиминутный setInterval(), чтобы вызвать службу "keep-alive", которая будет сохранять сеанс пользователя неограниченно, даже если они оставят приложение незанятым.

Ответ 2

Вы можете использовать MS Ajax без менеджера Script и использовать jQuery для использования WebMethods. Подробнее об этом здесь

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

Ответ 3

Я использую это для своего веб-сервиса keepalive. Измените это по своему вкусу и сообщите мне, если это сработает... Примечание: session ( "UID" ) - это переменная I, установленная при входе в систему. Я называю свой билет тем же самым

<WebMethod(CacheDuration:=0, EnableSession:=True)> _
Public Function keepSessionAlive() As String
    If Session("UID") Is Nothing OrElse Session("UID") = 0 Then
        Throw New ApplicationException("Login")
    End If

    Session("lastKeepSessionAlive") = DateTime.Now

    If Not (Context.Request.Cookies(System.Web.Security.FormsAuthentication.FormsCookieName) Is Nothing) Then
        Dim ticket As System.Web.Security.FormsAuthenticationTicket
        Try
            ticket = System.Web.Security.FormsAuthentication.Decrypt(Context.Request.Cookies(System.Web.Security.FormsAuthentication.FormsCookieName).Value)
            If ticket.Name = Context.Session("UID") Then
                System.Web.Security.FormsAuthentication.SetAuthCookie(Context.Session("UID"), False)
                Debug.WriteLine("keepAlive:AuthenticationReset")
            End If
        Catch ex As Exception
            Debug.WriteLine("keepAlive:AuthenticationReset FAILED!!!")
            Throw New ApplicationException("Login")
        End Try
    Else
        Debug.WriteLine("keepAlive.Load: No Authentication Cookie. Error")
        Throw New ApplicationException("Login")
    End If

    Return Session.SessionID.ToString
End Function

Ответ 4

Я не думаю, что полностью понимаю, что вы спрашиваете, но с точки зрения тайм-аута jquery ajax, вы можете установить локальный тайм-аут в вызове ajax.

Пример:

$.ajax('ajax.php',{timeout: 60000},function (data) {
alert(data);
}

Ответ 5

Используйте Fiddler или какую-либо другую утилиту, чтобы убедиться, что Microsoft достаточно умна, чтобы убедиться, что cookie обновляется между вызовами AJAX. Возможно, вам повезет (в отношении автоматического обновления форм auth tickeet), если вы используете Microsoft asp.net AJAX (который по существу похож).

Ответ 6

Формы auth работают через файл cookie. Куки файлы отправляются с запросами XMLHttpRequest, поэтому я не думаю, что здесь есть проблема.

Обратите внимание, что существует проблема, связанная с истечением срока действия FormsAuthTicket, и принудительное перенаправление на login.aspx или некоторые из них. Но это совсем другой сценарий, чем то, о чем вы говорите.