URLに表示されるjsessionidを非表示にする

Webアプリケーションで、初回アクセス時にURLへ埋め込まれるjsessionidを表示させないようにしたい!!

え?表示されちゃうんだから仕方ないやんって?

いやいや〜、今回のWebアプリを使っているお客さんがどうもこのjsessionidが表示されるのを嫌がってるんデスよ。

じゃあ、コンテキストでcookies=trueにしちゃえばいいじゃん

このアプリは携帯でも使用できるようになってるからデフォCookieはちょっと。。。

ここでjsessionidとStrutsについてざくっと

J2EEServlet仕様ではCookieにセッションIDを埋め込む、もしくはCookieが使えない場合にはURLにセッションIDを埋め込むことを推奨としている。。
Strutsのタグライブラリを使用した場合には、セッションIDをURLへ自動的に埋め込む実装がデフォでサポートされとります。
コンテナ側でURLリライティングを行わないようにすればjsessionidが付加されるのを抑止できるが、クライアントによってはセッショントラッキングが正しく行えなくなってしまう可能性がある。

URL-Rewriting問題な感じで、jsessionidを消しちゃうのもあるんですが、そうするとセッション使っている機能が使えなくなる。

色々調べるとUrl Rewrite Filterというものがあり、Apachemod_rewriteのような機能があるらしい。

これ使うとoutbound、つまりWebサーバからブラウザへレスポンスとして返すhtmlの中のURLを逆方向に書き換えることもできる。

それで、早速調べて実験。
jsessionidは32桁の0〜9,a〜f,A〜Fの組み合わせで構成されるそうなので、これを考慮して書くとこんな感じ。

  <outbound-rule encodefirst="true">
      <from>(.*);jsessionid=[0-9A-Fa-f]{32}(.*)</from>
      <to>$1$2</to>
  </outbound-rule>

これでアクセスすると、絶対表示されていたjsessionid君はちゃんとURLから消えてくれましたぃ

追加

ひがさんのブログで、カンタンな方法が掲載されてました。

クッキーがサポートされているブラウザで、最初のアクセスでURLに;jsessionidを表示させたくない場合、最初にindex.jspにアクセスしてもらうようにし、index.jspから本物の最初のページにリダイレクトします。

最初のアクセスで;jsessionidを表示させない方法CommentsAdd Star

こんな感じで。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Teeda html example</title>
</head>
<body>
<%
response.sendRedirect("view/start/index.html");
%>
</body>
</html>

関連書籍

StrutsによるWebアプリケーションスーパーサンプル第2版
高安 厚思(オープンストリーム勤務) 西川 麗(電通
ソフトバンク クリエイティブ
売り上げランキング: 45129

STRUTS・イン・アクション
テッド・ハスティッド
ソフトバンククリエイティブ
売り上げランキング: 93292