5

これについてはすでにたくさんの質問があることは知っていますが、それでも決定的な答えは見つからなかったようです。私が探しているのは、ユーザーがたとえば2週間ログインした後、またはログアウトするまで、ユーザーを記憶させることです。以下は私が起こるべきだと思うことであり、もう少し経験のある人が私が正しいか間違っているかを教えてくれるだろうかと思っていました。

ユーザーが初めてログインします。サーバーへのRPC呼び出しは、新しいsessionIDを含む'UserInfo'オブジェクトを返します。サーバー上で別名これが発生し、user返されます:

user.setSessionId(getThreadLocalRequest().getSession().getId());

が返された後user、クライアント側のデータを保存するためにCookieを作成する必要があります。現在のユーザーとsessionIDの別のユーザーを識別するためにCookieが必要であると言っているのは正しいですか?

final long DURATION = 1000 * 60 * 60 * 24 * 14; //duration remembering login - 2 weeks
Date expires = new Date(System.currentTimeMillis() + DURATION);

String sessionID = user.getSessionId();
String username = user.getUsername();
Cookies.setCookie("sessionID", sessionID, expires, null, "/", false);
Cookies.setCookie("username", username, expires, null, "/", false);

これで、ユーザーが後日アプリに戻ったときにCookieを確認し、(ユーザーからの明示的なログアウトなどの理由でCookieが存在し、削除されていない場合)、その値を使用してRPCを介してセッションの有効性を確認します。サーバー:

String sessionID = Cookies.getCookie("sessionID");
String username = Cookies.getCookie("username");

    if ( sessionID != null && username != null){
        AsyncCallback<UserInfo> callBack = new AsyncCallback<UserInfo>(){

            @Override
            public void onFailure(Throwable caught) {

                Window.alert("Error connecting to server.");


            }

            @Override
            public void onSuccess(Boolean sessionValid) {

                if (sessionValid)
                    loadInitialInterfaceForUser("username");
                else
                    loadLoginInterface();
            }

        };

    loginSvc.checkSessionValidity(sessionID,username, callBack);
    }

    else 
        loadLoginInterface();

さて、これまでに行ったことが正しいと仮定すると(これは少し長いショットです:P)、私の本当の質問は、サーバー側で正確に何をチェックする必要があるかということcheckSessionValidity(sessionID,username)です。

サーバーサイドに保存したユーザーを取得して、ユーザーに関連付けたユーザーと比較するだけの場合 sessionIDですか?sessionID有効期限が切れていないことも確認しますか?

私はこれが長らく、おそらくあまりよく言葉にされていない質問であることを知っています...私は頭を回すのに苦労しているので、どんな助けでも大歓迎です!

乾杯、スティーブ

4

2 に答える 2

5

はい、それは重要なことです。

これについて議論されたいくつかの興味深い点があります(セッションIDとユーザー名をDBに保存する)

sessionIdがサーブレット(java)で有効かどうかを確認する方法を確認してください(もちろん、impl class代わりにチェックインできますservlet)。

そしてここにGWTのセッション管理の優れた例があります

http://varuntayur.wordpress.com/2012/01/25/session-management-in-gwt

GWT、Cookie、およびWebページの指示に関する質問もお読みください

于 2013-02-23T21:27:03.930 に答える
0

次のリンクをご覧ください。

複数のGWTアプリケーションに同じCookieを使用することはできません

これで問題が解決する可能性があります。

于 2013-02-25T05:06:45.393 に答える