URLに表示されるjsessionidを非表示にする
Webアプリケーションで、初回アクセス時にURLへ埋め込まれるjsessionidを表示させないようにしたい!!
え?表示されちゃうんだから仕方ないやんって?
いやいや〜、今回のWebアプリを使っているお客さんがどうもこのjsessionidが表示されるのを嫌がってるんデスよ。
じゃあ、コンテキストでcookies=trueにしちゃえばいいじゃん
このアプリは携帯でも使用できるようになってるからデフォCookieはちょっと。。。
ここでjsessionidとStrutsについてざくっと
J2EEのServlet仕様ではCookieにセッションIDを埋め込む、もしくはCookieが使えない場合にはURLにセッションIDを埋め込むことを推奨としている。。
Strutsのタグライブラリを使用した場合には、セッションIDをURLへ自動的に埋め込む実装がデフォでサポートされとります。
コンテナ側でURLリライティングを行わないようにすればjsessionidが付加されるのを抑止できるが、クライアントによってはセッショントラッキングが正しく行えなくなってしまう可能性がある。
URL-Rewriting問題な感じで、jsessionidを消しちゃうのもあるんですが、そうするとセッション使っている機能が使えなくなる。
色々調べるとUrl Rewrite Filterというものがあり、Apacheのmod_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>