Время ожидания сеанса reset по каждому запросу

Задает ли сеанс reset каждый запрос независимо от того, проверяем ли мы переменные сеансов? Или мы должны использовать по крайней мере одну переменную сеанса?

Запрос Ajax вызывает сброс таймаута сеанса? как Update Panel, jQuery ajax,...

спасибо


Изменить 1)

Вызывает ли HTTP Get сброс таймаута сеанса??

Ответы

Ответ 1

да, это так. не имеет значения, действительно ли вы используете Session или нет.
Однако, если вы используете только вызовы ajax, вы можете столкнуться с некоторыми проблемами.
(хотя я сам этого не встречал, здесь объяснение)

Ответ 2

Выполняется ли тайм-аут сеанса reset по каждому запросу независимо от того, переменные контрольных сессий?

Session не истечет, если вы продолжаете называть код на стороне сервера. Тайм-аут Session будет сбрасываться при каждом запросе на сервер. При последующих запросах на тот же веб-сайт браузер предоставляет ASP.NET_SessionId Cookie, который использует серверный модуль для доступа к значению сеанса (например, пользовательская информация).

---------------------------------------------------------------------------------
                     How to detect the Session TimeOut
---------------------------------------------------------------------------------

enter image description here

---------------------------------------------------------------------------------

Вопрос - 2 - Запрос Ajax вызывает сброс таймаута сеанса? как панель обновления, jQuery ajax,...

Вопрос - 3 - вызывает ли HTTP Get причину сброса таймаута сеанса??

Session истечет в случае, если пользователь слишком долго ждал между запросами. Session не истечет, если вы продолжаете называть код server side. Тайм-аут Session будет сбрасываться при каждом запросе на сервер

Web.Config

<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" 
 sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
    cookieless="true" timeout="1" />

Ответ 3

Задает ли сеанс reset каждый запрос независимо от того, проверяем ли мы переменные сеансов? Или мы должны использовать по крайней мере одну переменную сеанса?

Пока не будет установлена ​​переменная сеанса, для каждого сообщения возвращается новый идентификатор сеанса.

Выполняет ли запрос Ajax сброс таймаута сеанса? как панель обновления, jQuery ajax,...

Идентификатор сеанса, который по умолчанию сохраняется в файле cookie, отправляется для каждого запроса AJAX, а также без запроса AJAX. Следовательно, сервер знает, что пользователь сеанса активен. Не верьте мне на слово. Используйте скрипач или инструмент F12 внутри ie. Вы можете видеть, что файлы cookie отправляются с каждым запросом AJAX GET/POST.

Ответ 4

Это будет зависеть от множества факторов, поэтому я предлагаю вам запустить тест, как показано ниже. Это действительно занимает менее 5 минут, чтобы узнать, работает ли ваша конкретная ситуация в вашей среде. Вот мой код, который я использовал для проверки этого, я использую элементы управления Telerik для проверки идеи, но я добавил .get, чтобы получить точный ответ, который вы хотели. У страницы aspx есть

<telerik:RadScriptManager ID="RadScriptManager1" Runat="server">
        </telerik:RadScriptManager>
        <telerik:RadAjaxManager ID="ram" runat="server">
            <AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="btnFake">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="lblAnswer" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </AjaxSettings>
        </telerik:RadAjaxManager>
        <script src="Scripts/jquery-1.4.1-vsdoc.js"></script>
    <script>
        $(document).ready(function () {
            setTimeout(function () { document.location.href = "default.aspx?next"; }, 61000);
            setInterval(function () {
                var divForTimer = $("#divTime");
                var secs = parseInt(divForTimer.html());
                secs = secs + 1;
                $("#divTime").html(secs.toString());
            }, 1000);

        });
        function getPage() {

            $.get("test.aspx", function(result) {
                $("#btnFake").val("Got it");

            });
        }
    </script>
   <asp:Label ID="lblAnswer" runat="server"></asp:Label>
   <Asp:button ID="btnTest" runat="server" Text="Renew" onclick="btnTest_Click" />
   <input type="button" ID="btnAjaxget"  onclick ="getPage()"  value="Ajax get" />
   <asp:Button ID="btnFake" runat="server"  Text ="Fake it" 
        onclick="btnFake_Click"/>
        <div id="divTime">1</div>

Страница .cs имеет

protected void Page_Load(object sender, EventArgs e)
        {
            Session.Timeout = 1;
            if (EMSG.CommonFunctions.GetSession("test").Length > 0)
            {
                this.lblAnswer.Text = "Session=" + EMSG.CommonFunctions.GetSession("test");
            }
            else
            {
                this.lblAnswer.Text = "No session";
            }

        }

        protected void btnTest_Click(object sender, EventArgs e)
        {
            Session["test"] = "variable set";
            this.lblAnswer.Text = Session["test"].ToString();
        }

        protected void btnFake_Click(object sender, EventArgs e)
        {
            lblAnswer.Text = "Ajax called.";
        }

--- вы можете упорядочить выше, чтобы соответствовать вашей ситуации. Но идея проста. Вы загружаете страницу. Нажмите кнопку "Обновить", и это установит ваш сеанс. Подождите 61 секунду, и страница обновится, а переменная сеанса исчезнет. Повторите попытку, но на этот раз нажмите одну из двух других кнопок через несколько секунд, и когда страница обновится, вы увидите, что переменная сеанса осталась неповрежденной из вызовов ajax. Вызов ajax в этой ситуации обновляет переменную сеанса.