久々に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