1

ユーザーに複数のアプリケーションを提供したいアプリケーションネットワークを開発しています。ユーザーは一度登録/ログインするだけで、同じログインですべてのアプリケーションを使用できます。

これを実現するために、ユーザーのセッション ID (ログイン時に受け取る) を格納する Cookie を作成しました。ユーザーがアプリケーションを開くたびに、Launch Module は Cookie を見つけようとし、サーバーにリクエストを送信して、そのセッションがまだ有効かどうかを確認します。

これをローカルの開発マシンでテストしたところ、すべて正常に動作しましたが、稼働前のテスト サーバーでは、1 つのアプリケーションで作成した Cookie が他のアプリケーションで見つかりませんでした。

私のテスト サーバーは Tomcat 7 です。

Cookie は、最初に次のコマンドを使用して作成されます。Cookies.setCookie("WebsiteName", result.getSessionId());

すべてのヘルプに感謝します!

編集 1

すべてを思いどおりに機能させるために、もう少し進みました。

もともと、私は HttpServlet セッションを実装していませんでしたが、独自のセッション管理システムを実装していました。これは、独自のセッション ID を Cookie に格納していました。サーバーログを確認したところ、両方のアプリケーションがサブパスの下にデプロイされている場合、アプリケーション 1 のセッション出力は次のようになることがわかりました。

Test HttpSession ID: 34446C7F3F345F74A0AAB5E292A47021 | Own Session ID: 3a25884692c499d5e72f07bb2b214a40f63f5a4a842852c58f30e1b46cf7bee7bc8a3394a9fe83a04ac4e1dcb4069dbca95a8f0001e012bc643934e08af35ec2 

アプリケーション 2 の AND

Test HttpSession ID: 429388DE8F0F76F877B077433FE16B66 | Own Session ID: 4e6b19a7621893de0cd0826b298ea4d8eb5ffecf4a7503f3274f729c2df28f4a1e9ce52179730b4139804f256591149fd712be76ad3afd87bade4f58aab4234f

Tomcat が Web アプリケーションごとに別のセッション ID を生成する疑いがあったため、メイン アプリケーションの .war-File の名前を .war-File に変更しROOT.war、それをルート アプリケーションとしてデプロイしました。ROOT アプリケーションの出力は次のとおりです。

Test HttpSession ID: B9F2D14A716C3A06E328F58ED0995D95 | Own Session ID: 039b1c0cd2726dcfa1d8585da589e05984cfb6c971e083423d8456673837ea954ead42728aecf93be358ed13c757e3848ee3eb061a2253350c7d6dc1a14c970c

AND でのアプリケーションのパスroot/webapp1/:

Test HttpSession ID: BFD836C297B1BF8204D243387401CCA7 | Own Session ID: 039b1c0cd2726dcfa1d8585da589e05984cfb6c971e083423d8456673837ea954ead42728aecf93be358ed13c757e3848ee3eb061a2253350c7d6dc1a14c970c

独自のセッション ID は Cookie に保存され、サーバーによってチェックされます。私の結論は、ブラウザはドメインのサブパスごとに異なる Cookie を作成するということです。

ドメイン名を Cookie に追加することで、ようやくうまくいきました。ばかげています :-)

4

1 に答える 1

2

ログを確認しましたか?ログまたは開発者ツール コンソールに表示されるエラーは何ですか (firebug?)。詳細なログは、回答を得るのに役立ちます。

ただし、正しいアプローチに従えば、試みているアプローチは間違いなく可能です。

ステップ 1 : セッションを作成する

 void createSession(String Username) 
 {
    getThreadLocalRequest().getSession().setAttribute("Username", Username);
 }

ステップ 2 : Cookie を適切に設定する

String sessionID = /*(Get sessionID from server's response to your login request.)*/;
final long DURATION = 1000 * 60 * 60 * 24 * 14; 
Date expires = new Date(System.currentTimeMillis() + DURATION);
Cookies.setCookie("sessionId", sessionID, expires, null, "/", false);

ステップ 3 : 設定した Cookie とユーザー資格情報からユーザー セッションを検証します。

boolean sessionAndUserValidFlag = false;
String sessionID = Cookies.getCookie("sessionId");
if ( sessionID != null )
{
   sessionAndUserValidFlag = validateSession(sessionID);
}
if (sessionAndUserValidFlag)
{
   //Continue login
}
else
{
  //Display Login Popup
}

あなたの validateSession メソッドは次のようになります

public boolean validateSession(String sessionId)
{
    if (getThreadLocalRequest().getSession().getId.equals(sessionId))
    {
       if ( getThreadLocalRequest().getSession().getAttribute("UserName") != null )
       {
             return true;
       }
    }
    return false;
}
于 2013-01-13T17:55:35.750 に答える