1

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

4 回答 4

1

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

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

于 2012-06-28T09:38:06.323 回答
0

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

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

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

于 2012-06-28T09:24:16.673 回答
0

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

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

于 2012-06-28T09:24:21.713 回答
0

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

Response.Cookies.Remove(FormsAuthentication.FormsCookieName);

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

于 2012-06-28T09:26:27.263 回答