HttpUrlConnection を使用してサーブレットに接続し、サーブレットがセッション ID をアプリに返すと、アプリがデフォルトのブラウザーを起動します。サーブレットがセッション ID を返す前に、セッションに属性を設定します。
HttpSession session = request.getSession();
session.setAttribute("ErrorInfo", "wrong!");
Android アプリでは、セッション ID を取得し、デフォルトのブラウザーを起動します。
Uri uri = Uri.parse("https://192.168.1.100:8443/test/error.jsp;jsession=" + sessionid);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
error.jsp では、次のような属性を取得します。
<%=session.getAttribute("ErrorInfo") %>
<%=session.getId() %>
テストすると「間違った!」と表示されると思っていたのですが、jspページに「null」と表示され、ブラウザが新しいセッションを生成しました。アドレスバーのセッションIDがsession.getId()の値と異なります。
たとえば、アドレス バーの URL は「https://192.168.1.100:8443/test/error.jsp;jsessionid=C4E6732EBB4C17F409AB41143735C096」です。
この場合、ブラウザーは新しいセッションを生成すべきではないと思いますが、生成されました。
OK、私はこの問題を自分で解決しました。問題はブラウザが原因です。まず、ブラウザを使用して Web サイトにアクセスし、ブラウザがセッションを生成します。その後、ブラウザは、ブラウザが閉じられるまでこのセッションを使用します。そのため、アプリによって配信されたセッション ID はブラウザーによって無視されます。この問題を解決するために、アプリがブラウザーのセッションを取得し、このセッションを HttpUrlConnection で使用するようにしました。これにより、プロセス全体でセッションが 1 つだけになります。