2014-10-21 1 views
9

У нас есть приложение ASP.Net, которому было дано 20-минутное скользящее окончание сеанса (и cookie). Однако у нас есть несколько AJAX, которые опросили сервер для получения новой информации. Недостатком этого, конечно же, является то, что сессия будет продолжаться бесконечно, так как она поддерживается живыми вызовами, заставляя время истечения срока обновления обновляться. Есть ли способ предотвратить это, т. Е. Разрешить обновление сеанса только для вызовов, отличных от ajax?Как предотвратить опрос AJAX, поддерживающий сеансы Asp.Net живые

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

Другие дискуссии StackOverflow на разговоры о сохранении 2 отдельного приложения (один для прошедших проверку подлинности вызовов, один для проверки подлинности. Я не уверен, что это будет вариант, как нужно быть заверены все вызовы.

Есть идеи?

+0

Посмотрите на это - http://seejoelprogram.wordpress.com/2008/11/10/maintaining-aspnet-session-state-in-an-ajax-application/ –

+0

+1! Есть ли [это] (http://stackoverflow.com/q/4392836/304683) некоторые идеи? – EdSF

+0

Вы можете попытаться отключить состояние сеанса для запроса: http://www.codeproject.com/Articles/201879/Few-important-tips-that-you-should-know-while-usin – Chris

ответ

-1

Я сделал это, создав скрытую страницу в I-Frame. Затем с помощью JavaScript он отправляет обратно каждые 18 минут, чтобы сохранить сессию в живых. Это работает очень хорошо.

Этот пример из ASP. NET Forms, но может быть изменен для MVC.

  1. Создать страницу с именем KeepSessionAlive страницы и добавить мета-тег обновления

    мета ID = "MetaRefresh" HTTP-эквив = "обновить" содержание = "21600; URL = KeepSessionAlive.aspx"

  2. В коде за

    защищенная строка WindowStatusText = "";
    protected void Page_Load(object sender, EventArgs e) 
    { 
        //string RefreshValue = Convert.ToString((Session.Timeout * 60) - 60); 
    
        string RefreshValue = Convert.ToString((Session.Timeout * 60) - 90); 
    
        // Refresh this page 60 seconds before session timeout, effectively resetting the session timeout counter. 
        MetaRefresh.Attributes["content"] = RefreshValue + ";url=KeepSessionAlive.aspx?q=" + DateTime.Now.Ticks; 
    
        WindowStatusText = "Last refresh " + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString(); 
    } 
    
  3. Добавьте скрытый IFRAME в мастер-странице

    IFrame ID = "KeepAliveFrame" SRC = "KeepSessionAlive.aspx" frameBorder = "0" ширина = "0" высота = "0"

Download example

+1

Разве это не противоречит тому, что было задано? =) – artokai

+0

Сначала я подумал, но последняя часть вопроса была «... Есть ли способ предотвратить это, т. Е. Разрешить обновление сеанса только для вызовов без аякса?» –

+0

Да, это наоборот - спасибо артокай. См. Мой комментарий выше. – Greg

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