2014-10-21 11 views
9

Mamy aplikację ASP.Net, która otrzymała 20-minutowe wygaśnięcie daty sesji (i cookie). Mamy jednak trochę AJAX, która odpytuje serwer w poszukiwaniu nowych informacji. Minusem tego jest oczywiście to, że sesja będzie trwać bezterminowo, ponieważ jest utrzymywana przy życiu przez połączenia głosowe powodujące odświeżenie czasu wygaśnięcia. Czy istnieje sposób, aby temu zapobiec - tzn. Zezwolić tylko na odświeżanie sesji w przypadku wywołań innych niż ajax?Jak zapobiegać pobieraniu AJAX, utrzymując przy życiu sesje Asp.Net

Wyłączenie wygaszania wygaśnięcia nie jest tak naprawdę opcją, ponieważ jest to aplikacja, z której użytkownicy biznesowi będą korzystać przez większość dnia między rozmowami telefonicznymi.

Inne dyskusje na ten Stackoverflow Dyskusja o zachowaniu 2 odrębny wniosek (jeden dla uwierzytelnionych połączeń, po jednym dla Nieuwierzytelniona. Nie jestem pewien, że to będzie opcja jak wszystkie połączenia muszą być uwierzytelnione.

pomysłów?

+0

rzucić okiem na to - http://seejoelprogram.wordpress.com/2008/11/10/maintaining-aspnet-session-state-in-an-ajax-application/ –

+0

+1! Czy [this] (http://stackoverflow.com/q/4392836/304683) oferuje kilka pomysłów? – EdSF

+0

Możesz spróbować wyłączyć stan sesji dla żądania: http://www.codeproject.com/Articles/201879/Few-important-tips-that-you-shold-while-usin – Chris

Odpowiedz

-1

zrobiłem to poprzez stworzenie ukrytą stronę w I-Frame. Następnie przy użyciu JavaScript to księguje powrotem co 18 minut, aby utrzymać sesję żyje. to działa bardzo dobrze.

Ten przykład jest z ASP. Projekt NET Forms, ale można go zmodyfikować pod kątem MVC

  1. Utwórz stronę o nazwie strona KeepSessionAlive i dodać tag meta odświeżania

    meta id = "MetaRefresh" http-equiv = "refresh" content = "21600; url = KeepSessionAlive.aspx"

  2. W kodzie za

    chroniony ciąg 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. Dodaj ukrytą iFrame na stronie wzorcowej

    iframe ID = "KeepAliveFrame" src = "KeepSessionAlive.aspx" frameBorder = "0" width = "0" height = "0"

Download example

+1

Czy nie jest to przeciwieństwo tego, co zostało zadane? =) – artokai

+0

Tak myślałem na początku, ale ostatnia część pytania brzmiała: "Czy istnieje sposób, aby temu zapobiec - tzn. Zezwolić na odświeżanie sesji tylko w przypadku wywołań innych niż ajax?" –

+0

Tak, to jest odwrotnie - dzięki artokai. Zobacz mój komentarz powyżej. – Greg

Powiązane problemy