【问题标题】:Using ASP.Net Timer without refreshing session在不刷新会话的情况下使用 ASP.Net Timer
【发布时间】:2012-06-28 09:04:39
【问题描述】:

我有一个网页,我希望在其中自动保存输入的数据。为此,我使用 ASP.NET 计时器。但我的问题是我仍然希望我的会话由于不活动而超时,所以我可以让计时器调用滴答声而不刷新会话时间吗?

这是代码,抱歉,我还不能上传图片:=

<form runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>


<asp:Timer ID="SaveTimer" runat="server" Interval="150000"
    ontick="SaveTimer_Tick">
</asp:Timer>
<asp:UpdatePanel runat="server"  updatemode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger controlid="SaveTimer"
            eventname="Tick"  />
    </Triggers>
    <ContentTemplate>
    </ContentTemplate>
</asp:UpdatePanel>

【问题讨论】:

  • 会话超时已深入集成到 ASP.NET 管道中。没有简单的方法可以做到这一点。
  • 所以不刷新会话就不能使用定时器?出于安全原因,我需要会话超时。

标签: c# asp.net .net ajax


【解决方案1】:

我认为您想要的是只要用户在该页面上工作,就可以保持会话处于活动状态。当您不触发自动保存选项时,如果没有更改,您将不会返回服务器,因此不会更新会话。在这种情况下,当用户停止在该页面上工作时,会话最终会超时。

同样,只有在实际需要保存更改时才回调服务器。

【讨论】:

    【解决方案2】:

    没有。 asp.net 无法检测到您的用户处于非活动状态。 只要您的浏览器正在发出请求,服务器用户就处于活动状态。

    您必须自己使用 javascript 跟踪不活动,并在用户不活动 10 分钟后发布到注销 url。

    您可以检测用户是否处于活动状态,我在输入、按钮单击和鼠标活动时的跟踪模糊。设置一个 javascript 变量以指示用户实际上在那里。

    【讨论】:

      【解决方案3】:

      在不影响会话的情况下进行自动保存的唯一方法是使用具有EnableSessionState="false" 的页面或没有会话的处理程序。

      在这种情况下,您必须传递一些从 url 编码的参数,以便处理程序(或没有会话的页面)知道将数据保存在数据库中的何处(而不是在会话中)

      【讨论】:

        【解决方案4】:

        我通过这样做做了类似的事情:

        Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
        

        它并不能完全阻止会话超时,但是如果不在客户端更新 cookie,它最终会忘记它正在使用哪个会话。现在,如果您不使用表单身份验证,我想您将不得不删除一些其他 cookie。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-17
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          • 2015-04-25
          • 2021-02-26
          • 2014-09-20
          相关资源
          最近更新 更多