19

セッション変数をチェックするかどうかに関係なく、セッションタイムアウトはリクエストごとにリセットされますか? または、少なくとも 1 つのセッション変数を使用する必要がありますか?

Ajaxリクエストによりセッションタイムアウトがリセットされますか? のようUpdate PaneljQuery ajax、、...

ありがとう


編集1)

HTTP Getセッションタイムアウトのリセットを引き起こしますか??

4

4 に答える 4

19

セッション変数をチェックするかどうかに関係なく、セッションタイムアウトはすべてのリクエストでリセットされますか?

Sessionサーバー側のコードを呼び出し続けても期限切れになりません。sessionタイムアウトは、サーバーへのリクエストごとにリセットされます。同じ Web サイトへの後続の要求で、ブラウザーはASP.NET_SessionId Cookie、サーバー側モジュールがセッション値 (ユーザー情報など) にアクセスするために使用する を提供します。

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

ここに画像の説明を入力

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

質問 - 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" />
于 2012-05-03T18:11:12.903 に答える
13

はい、そうです。を実際に使用するかどうかは問題ではありませSessionん。
ただし、 ajax 呼び出しのみを使用している場合は、いくつかの問題が発生する可能性があります。
(私自身は遭遇していませんが、ここに説明があります)

于 2012-04-29T06:10:58.973 に答える
4

セッション変数をチェックするかどうかに関係なく、セッションタイムアウトはすべてのリクエストでリセットされますか? または、少なくとも 1 つのセッション変数を使用する必要がありますか?

セッション変数が確立されるまで、ポストバックごとに新しいセッション ID が生成されます。

Ajaxリクエストによりセッションタイムアウトがリセットされますか? 更新パネル、jQuery ajax など...

デフォルトで Cookie に保存されるセッション ID は、AJAX および非 AJAX リクエストごとに送信されます。したがって、サーバーはセッション ユーザーがアクティブであることを認識します。私の言葉を鵜呑みにしないでください。ie内でフィドラーまたはF12ツールを使用します。すべての AJAX GET/POST 要求で送信される Cookie を確認できます。

于 2012-05-08T21:04:04.070 に答える
1

これは多くの要因に依存するため、以下のようなテストを実行することをお勧めします。実際の環境で正確な状況が機能するかどうかを確認するのに 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 秒待つと、ページが更新され、セッション変数がなくなります。もう一度試してみてください。数秒後に他の 2 つのボタンのいずれかをクリックすると、ページが更新されたときにセッション変数が ajax 呼び出しからそのまま残っていることがわかります。この状況で ajax を呼び出すと、セッション変数が更新されます。

于 2012-05-05T19:38:43.283 に答える