Увеличение времени ожидания проверки подлинности с помощью форм при выполнении вызовов AJAX с помощью jQuery - PullRequest
10 голосов
/ 22 декабря 2008

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

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

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

Ответы [ 6 ]

8 голосов
/ 23 декабря 2008

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

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

1 голос
/ 29 августа 2011

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

<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
1 голос
/ 23 декабря 2008

Вы должны иметь возможность использовать MS Ajax без диспетчера скриптов и использовать jQuery для использования WebMethods. Больше информации при этом здесь

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

0 голосов
/ 23 декабря 2008

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

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

0 голосов
/ 23 декабря 2008

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

0 голосов
/ 22 декабря 2008

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

Пример:

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