0

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 つだけになります。

4

1 に答える 1

0

「?」を使ってみてもいいですか? それ以外の ';' queryString部分を追加するときにURLに文字を追加しますか?

于 2012-07-08T16:25:41.453 に答える