使用ASP.Net Timer而不刷新会话

时间:2012-06-28 09:04:40

标签: c# asp.net .net ajax

我有一个网页,我希望输入的数据能够自动保存。为此,我使用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>

4 个答案:

答案 0 :(得分:1)

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

因此,只有在实际保存更改时才回调服务器。

答案 1 :(得分:0)

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

您必须使用javascript自行跟踪不活动状态,并在用户处于非活动状态时发布到注销网址,请说10分钟。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我做了类似的事情:

Response.Cookies.Remove(FormsAuthentication.FormsCookieName);

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