Как остановить аутентификацию / сессию форм ASP.net при возобновлении вызова веб-службы setInterval ajax? - PullRequest
9 голосов
/ 23 июня 2010

У меня есть элемент управления, который я написал, который имеет компонент javascript и компонент веб-службы.Проблема, с которой я столкнулся, заключается в том, что javascript настроен на выполнение:

setInterval(this._checkAlertsHandler, this._messageCheckInterval * 1000);

Это вызывает функцию, которая делает вызов веб-службы следующим образом:

Alert.SiteAlertService.GetAlerts(this._receivedAlertsHandler, this._errorReceivedAlertsHandler);

Так что это используетметоды прокси javascript веб-службы для доступа к веб-службе.Проблема заключается в том, что наше приложение имеет проверку подлинности с помощью форм и значение тайм-аута, поэтому, если пользователь слишком долго простаивает, он выйдет из него.

Мой вызов веб-службы, очевидно, отправляет файл cookie, который включает в себя сеанс и проверку подлинности с помощью формключ к веб-сервису.Затем веб-служба asp.net автоматически возобновляет сеанс И проверяет подлинность форм.Каждый раз, когда javascript попадает в веб-сервис, он в основном поддерживает жизнь пользователя.Я не хочу, чтобы такое поведение, это должно просто обойти это, так что даже если этот js попадает в веб-сервис для проверки новых сообщений, если пользователь не сделал обратную передачу в нашем приложении (и фактически простаивает), он будетпо-прежнему выходить из них.Этого не происходит: (

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

Как мне это сделать / изменить мой веб-сервис / или элемент управления, чтобы он работал так, как я этого хочу?

Ответы [ 4 ]

7 голосов
/ 18 августа 2011

Я тоже работаю над разными подходами.Один из способов сделать это - добавить это в конечную точку службы Ajax:

// Hide the cookie so this call doesn't extend the user's ticket
HttpContext ctx = HttpContext.Current;
ctx.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);

Таким образом, вы можете отменить обновление Auth Ticket, так как обновленный cookie никогда не вернется к клиенту.

Если у вас есть несколько конечных точек Ajax, которые вы хотите исключить, может быть реализован модуль для определения этих конечных точек и включения кода для удаления файла cookie из ответа.

1 голос
/ 17 июля 2013

@ RyanW предоставил ответ, который мне был нужен, так что вот моя реализация для MVC, использующая атрибут только для того, чтобы все было СУХОЙ.

using System.Web.Mvc;
using System.Web.Security;

namespace Your.Web.Attributes
{
    public class RemoveAuthCookieAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            filterContext.HttpContext.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
            base.OnActionExecuted(filterContext);
        }
    }
}

Реализация:

[RemoveAuthCookie]
public ActionResult PollMe()
{
    return View();
}
0 голосов
/ 18 февраля 2011

Не могли бы вы поместить свой файл asmx веб-службы в отдельный отдельный проект / решение / приложение?

Таким образом, он должен использовать другой идентификатор сеанса для вашего основного приложения.

0 голосов
/ 23 июня 2010

Вы можете исключить ваш веб-сервис из аутентификации форм:

<location path="yourwebservice.asmx">
    <system.web>
        <authorization>
            <allow users="?"/>
        <authorization>
    </system.web>
</location>  

Но вам, вероятно, нужна информация о пользователе, чтобы вы могли настроить веб-сервис для использования аутентификации форм, но деактивировать SlidingExpiration:

<location path="yourwebservice.asmx">
    <system.web>
        <authentication mode="Forms">
            <forms slidingExpiration="false"></forms>
        </authentication>
    </system.web>
</location>  

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...