Cookieの使えないケータイは爆発しろ

久々にSAStrutsねた。

SAStrutsに限らずWebアプリ一般で、データの更新・作成処理と表示処理を分割するためにリダイレクトが使われる。HogeAction#saveで保存が完了した後に、FugaAction#indexへリダイレクトするようにした。

public class HogeAction {
  @Execute
  public String save() {

    // ... 何か保存処理

    return "/fuga?redirect=true";
  }
}

で、saveが成功すると302ステータスを返しリダイレクトするのだが、Cookieが使えないブラウザではLocationヘッダの値にjsessionidが付加される。

Location: http://localhost:8080/test/fuga;jsessionid=xxxxxxxxxxxxxxxxxxxxxx

ここでURLのアクション名の末尾が / で終わっていない場合 / 付きのURLに再度リダイレクトされるんだけど…

Location: http://localhost:8080/test/fuga/

jsessionidが引き継がれないため、Cookieの使えないドコモのケータイではセッションが切れてしまうようだ。テスター実機テストサボりやがったな、と他人のせいにしておくwww

HogeAction#saveの戻り値を /fuga/?redirect=true または /fuga/index?redirect=true に修正すればおK