hiddenの場合って「入力画面 -> 確認画面 -> DB登録」って時に、確認画面からhiddenでDB登録に渡すでしょ
確認画面の時にバリデートして、DB登録直前にまたバリデートって面倒じゃない?(hidden値改竄の可能性があるから)

セッションだったら確認画面でセットしたデータがDB登録の時になって変わることがないからいいんだけど