19

无论我们是否检查会话变量,会话超时是否会在每个请求上重置?或者我们应该使用至少一个会话变量?

Ajax 请求是否会导致重置会话超时?像Update Panel,,,jQuery ajax...

谢谢


编辑 1)

是否HTTP Get会导致重置会话超时?

4

4 回答 4

19

无论我们是否检查会话变量,会话超时是否会在每个请求上重置?

Session如果您继续调用服务器端代码,则不会过期。session超时将在每次请求服务器时重置。在对同一网站的后续请求中,浏览器提供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

无论我们是否检查会话变量,会话超时是否会在每个请求上重置?或者我们应该使用至少一个会话变量?

在建立会话变量之前,每次回发都会生成一个新的会话 ID。

Ajax 请求是否会导致重置会话超时?像更新面板,jQuery ajax,...

默认情况下保存在 cookie 中的会话 ID 会为每个 AJAX 以及非 AJAX 请求发送。因此,服务器知道会话用户是活动的。不要相信我的话。在 ie 中使用 fiddler 或 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 秒,页面将刷新,会话变量消失。再试一次,但这次在几秒钟后单击其他两个按钮之一,当页面刷新时,您将看到会话变量在 ajax 调用中保持不变。这种情况下的 ajax 调用会刷新会话变量。

于 2012-05-05T19:38:43.283 回答