【问题标题】:Fetch data from server without extending session timeout从服务器获取数据而不延长会话超时
【发布时间】:2011-01-13 19:37:15
【问题描述】:

在 ASP.net 中是否有任何方法可以在不延长会话超时的情况下从服务器获取数据?这需要每隔几分钟完成一次,无需用户交互,直到页面关闭。

其他上下文,根据要求:

我的 web 应用程序中的页面需要每隔几分钟轮询一次服务器以检查特定情况(在这种情况下,紧急维护计划为 30 分钟时间)。当条件为真时,页面将向用户显示一条消息。当条件为假时,不需要发生任何事情。

据我了解,回发到服务器会重置会话到期前的时间。我们不希望每次页面轮询服务器时会话都被扩展/刷新/重置/无论单词是什么。我需要一种无需重置会话超时即可自动轮询服务器的方法。

谢谢。

【问题讨论】:

  • 也许我们需要更多信息?您可以延长会话超时时间。
  • AJAX 对 Web 服务的调用不应延长用户的会话。
  • @Refugee:不应该还是不应该?随意发表您的评论作为答案,因为这听起来很可能是我正在寻找的答案!
  • 我已经在下面回答了你的问题,以及如何达到你想要的效果的想法。

标签: asp.net asp.net-3.5 session-timeout


【解决方案1】:

如果您在一个冗长的 HTTP 请求的上下文中询问,以便您希望防止 HTTP 超时,请查看 web.config 的 <httpRuntime executionTimeout="99999"></httpRuntime>,我认为其中 executionTimeout 以秒为单位,http://msdn.microsoft.com/en-us/library/e1f13641(v=vs.71).aspx

如果真的只是会话超时问题,是否可以在冗长的进程运行时在同一用户会话下异步 ping 服务器?

编辑: 根据您的编辑,如果您将“网站维护”Web 服务划分为网站正常部分的会话状态范围之外的服务,那么您可以随意调用它。例如,如果此时您在当前网站中使用 ASMX Web 服务,只需将其分区到一个单独的应用程序中,可能作为您应用程序的一个目录,以便它属于同一个域。我想那会很好用。

我不确定您此时调用的 Web 服务类型(ASMX、WCF 等),或者即使您此时调用的 Web 服务与您的 ASPX 位于同一应用程序中应用程序页面。

【讨论】:

    【解决方案2】:

    首先,如果查询超出会话时间限制,则查询存在严重问题。我宁愿先修复查询。 但是,如果您仍想使用会话来执行此操作,请尝试以下操作:

    您可以在您的应用中包含一个 Dummy.aspx,然后让一个图像元素每 15 分钟刷新一次其 URL,例如:

    <img id="dummyImage" src="/Dummy.aspx" width=0 height=0/>
    
    <script type="text/javascript">
        var dummyImage = document.getElementById("dummyImage");
        setInterval(function(){
            dummyImage.src = "Dummy.aspx?_tmp=" + (Math.random() * 100000);
        }, 900000);
    </script>
    

    这样您就不会影响全局级别的会话超时。

    【讨论】:

    • 通过执行 dummyImage.src = "Dummy.aspx?.....",浏览器将向该 url 发出 GET 请求,包括 sessionId cookie,从而重置会话超时.
    【解决方案3】:

    使用触发 AJAX 调用的 javascript 计时器。所以在你的PageLoad 事件中回显一个javascript setInterval(functiontocall(), timetowait); 函数。您调用的方法将是对执行查询的 Web 服务的 AJAX 命中。

    这会一直调用自己,直到用户关闭页面。

    AJAX 命中不会刷新会话。

    【讨论】:

    • 不幸的是,AJAX 在同一个 Web 应用程序上的命中确实会刷新会话。不过,感谢您的帮助。
    • AJAX 请求和普通请求一样,只是它们是异步的。这意味着它们还将包含会话 id cookie,将请求绑定到会话并因此重置超时。
    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 2016-04-02
    • 2015-09-20
    • 2011-01-17
    • 2015-09-08
    • 2018-03-19
    • 1970-01-01
    • 2021-06-22
    相关资源
    最近更新 更多