セッションに保存するのが駄目な理由が分からん。
application_controllerにチェックするメソッド定義して、各コントローラでfilterで呼ぶとか。
filterを工夫すればいいんじゃないの?