Java gwt中的会话管理

Java gwt中的会话管理,java,gwt,gwt-ext,Java,Gwt,Gwt Ext,我正在开发一个GWT ext应用程序。 在这个应用程序中,我管理客户端会话。为此,我编写了以下代码: 要管理会话,请执行以下操作: 导入com.google.gwt.user.client.Timer public class ClientTimers { private static final Timer SESSION_MAY_HAVE_EXPIRED_TIMER = new Timer() { @Override public void run

我正在开发一个GWT ext应用程序。 在这个应用程序中,我管理客户端会话。为此,我编写了以下代码:

要管理会话,请执行以下操作: 导入com.google.gwt.user.client.Timer

public class ClientTimers {

    private static final Timer SESSION_MAY_HAVE_EXPIRED_TIMER = new Timer() {

        @Override
        public void run() {
            // Warn the user, that the session may have expired.
            // You could then show a login dialog, etc...
        }
    };

    public static void renewSessionTimer() {

        // First cancel the previous timer
        SESSION_MAY_HAVE_EXPIRED_TIMER.cancel();

        // Schedule again in 5 minutes (maybe make that configurable?)
        // Actually, let's subtract 10 seconds from that, because our timer
        // won't be synchronized perfectly with the server's timer.
        SESSION_MAY_HAVE_EXPIRED_TIMER.schedule(5 * 60 * 1000 - 10000);
    }
}
要获取用户活动,请执行以下操作:

    Ext.get("pagePanel").addListener("click", new EventCallback() {
        @Override
        public void execute(EventObject e) {
            //MessageBox.alert("On Mouse Click");
    });

    Ext.get("pagePanel").addListener("keydown", new EventCallback() {

        @Override
        public void execute(EventObject e) { //
            //MessageBox.alert("On Key Press Click");
        }
    });
此代码工作正常,但我的问题是: 当超时发生时,此代码将自动注销。对于我的代码,我希望在单击或按键时,它应该注销。情况是这样的:如果用户登录,注销时间为5分钟。用户现在不在屏幕上执行任何活动,根据上述代码,5分钟完成后,它将自动注销

现在我的要求是,如果用户登录,并且在5分钟内没有做任何事情。它不应该自动进行任何注销。与其在5分钟内完成注销,不如在6分钟内单击或按下键,然后进行注销过程


基本上,当计时器超过指定时间时,注销过程应该在用户活动上完成,而不是自动完成。

我认为您要搜索的是:

Window.Location.reload()

每隔几秒钟用定时器触发一次,这样用户总是显得活跃


(顺便说一句)我想你要找的东西是:

Window.Location.reload()

每隔几秒钟用定时器触发一次,这样用户总是显得活跃


(顺便说一句,我从中了解到)

在覆盖整个区域的不可见div上安装一个JavaScript事件处理程序。如果收到事件,则向服务器发送AJAX请求

然后,服务器可以执行它需要执行的任何操作。在客户端,您可以等待AJAX请求的回复并显示“youhaveloggeout”

这种方法有一个缺点:存储在会话中的对象将保持活动时间过长。因此,即使用户从未注销,只是走开(或者他的浏览器崩溃),会话仍将保持活动状态

几天后,大量的死机会话将累积,服务器将崩溃

因此,更好的解决方案是像您已经做的那样自动注销用户,并安装上述AJAX事件处理程序,以便在用户返回浏览器时显示消息

这样,您的服务器就可以清理死机会话,用户在能够阅读时(当他在屏幕前时)就会收到一条消息


请注意,您无法区分用户和清洁人员敲击鼠标。

在覆盖整个区域的不可见div上安装JavaScript事件处理程序。如果收到事件,则向服务器发送AJAX请求

然后,服务器可以执行它需要执行的任何操作。在客户端,您可以等待AJAX请求的回复并显示“youhaveloggeout”

这种方法有一个缺点:存储在会话中的对象将保持活动时间过长。因此,即使用户从未注销,只是走开(或者他的浏览器崩溃),会话仍将保持活动状态

几天后,大量的死机会话将累积,服务器将崩溃

因此,更好的解决方案是像您已经做的那样自动注销用户,并安装上述AJAX事件处理程序,以便在用户返回浏览器时显示消息

这样,您的服务器就可以清理死机会话,用户在能够阅读时(当他在屏幕前时)就会收到一条消息


请注意,您无法区分用户和清洁人员敲击鼠标。

在计时器中,每秒钟递增一个变量。
当用户在5分钟后或6分钟后单击任何按钮时,请检查计数器变量,如果变量大于6,则可以使用Window.Location.reload()要注销或重新加载()。

在计时器中,每秒递增一个变量。 当用户在5分钟后或6分钟后单击任何按钮时,请检查计数器变量,如果变量大于6,则可以使用Window.Location.reload()注销或重新加载()